我想从账户ui流星包访问用户集合中存在的所有用户电子邮件的列表



var user=Meteor.users.find().fetch;这会按预期返回一个,但我应该如何仅检索用户集合中所有用户的emails.address字段?

这里有一个可能的解决方案:

var emails = _.chain(Meteor.users.find().fetch())
  .pluck('emails')
  .flatten()
  .pluck('address')
  .value();

这将为您提供一个扁平的电子邮件列表,但请注意,在流星中,用户可以拥有多个电子邮件地址(如果您的UI支持的话)。对于上面的示例,所有这些都将被返回。

一个简单的答案是:

db.users.find({},{ "emails.address" : 1});

这会产生这样的东西:

{ "_id" : "caGts2niaDyS6TbYJ", "emails" : [ { "address" : "asoldfj@bigglie.com" } ] }
{ "_id" : "g5oPp4ReDCwuuW8yn", "emails" : [ { "address" : "blogsalfd@sag.com" } ] }
{ "_id" : "ge9YyFehBMN7q3xQ9", "emails" : [ { "address" : "hag@toldyou.com" } ] }

如果您不想要_id:

db.users.find({},{ "emails.address" : 1, "_id": 0});

哪个生产:

{ "emails" : [ { "address" : "asoldfj@bigglie.com" } ] }
{ "emails" : [ { "address" : "blogsalfd@sag.com" } ] }
{ "emails" : [ { "address" : "hag@toldyou.com" } ] }

David Weldon正确地指出,电子邮件地址字段实际上是一个数组,因此您可以在该字段中保存多封电子邮件。

然而,如果你知道它只包含一封电子邮件,你可以使用它并搜索它,而不必担心数组。例如,以下将生成一条记录:

Meteor.users.findOne({ "emails.address" : 'asoldfj@bigglie.com' });

最新更新