21

In my meteor.js app, I'm trying to write a simple admin page which can find a user by his/her email address.

I can see that in the Meteor.users collection there is an 'emails' array, which has objects like so

{ address : 'foo@foo.com',
  verified : false
}

Normally in Mongodb I can search inside this 'emails' array like so :

Meteor.users.find({ emails.address : 'foo@foo.com' });

But this query is throwing an error :

While building the application:
client/admin.js:224:41: Unexpected token .

Aka Meteor doesn't like the nested query...

Any ideas on how to query the Meteor.users collection by email address ?

4

6 回答 6

58

您也可以使用已有的,只需将其放在引号中即可:

Meteor.users.find({ "emails.address" : 'foo@foo.com' });
于 2013-10-31T09:31:06.867 回答
29

如果在服务器上,Meteor 有一个特殊的功能: Accounts.findUserByEmail(email)

我相信这是推荐的方式。

于 2015-10-04T19:42:59.287 回答
18

电子邮件包含一系列电子邮件。每封电子邮件都有一个地址。

试试{ emails: { $elemMatch: { address: "foo@foo.com" } } }

信息$elemMatch这里。

有关作为数组的电子邮件的信息在此处

于 2013-10-30T23:07:06.913 回答
3

默认情况下,Meteor 只发布登录用户,正如你提到的,你可以对该用户运行查询。为了访问其他用户,您必须在服务器上发布它们:

Meteor.publish("allUsers", function () {
  return Meteor.users.find({});
});

并在客户端订阅它们:

Meteor.subscribe('allUsers');

并运行以下命令

Meteor.users.find({"emails": "me@example.com"}).fetch()

或者

Meteor.users.find({"emails.0": "me@example.com"}).fetch()

参考这个

于 2015-07-16T07:06:34.543 回答
3

如果要查找 Accounts 数组中的所有电子邮件,并执行不敏感查询:

const hasUser = Meteor.users.findOne({
    emails: {
      $elemMatch: {
        address: {
          $regex : new RegExp(doc.email, "i")
        }
      }
    }
});
于 2016-02-15T08:05:48.977 回答
2

如果这适用于服务器但不适用于客户端,则一种可能的解决方法是在users_by_email服务器上使用一种方法:

if (Meteor.isServer) {
    Meteor.methods({
        'get_users_by_email': function(email) {
            return Users.find({ emails.address: email }).fetch();
        }
    });
}
if (Meteor.isClient) {
    foo_users = Meteor.call('get_users_by_email', 'foo@bar.baz');
}
于 2013-10-30T23:08:51.670 回答