Mongo在嵌套数组中搜索key的值

时间:2016-04-22 20:05:49

标签: javascript arrays mongodb meteor mongodb-query

这是我的文件:

"_id" : "dAWcFHJzDPJ2XT9Sh",
"createdAt" : ISODate("2016-04-22T18:03:47.761Z"),
"services" : {
    "password" : {
        "bcrypt" : "$2a$10$NYf53o/Uu8PvHPsGllRGA.WLbVpspNM4jk/6FtCzZLW.70.uQ2HXe"
    },
    "resume" : {
        "loginTokens" : [ 
            {
                "when" : ISODate("2016-04-22T18:03:47.771Z"),
                "hashedToken" : "dECxxuV/QyU2AU+/Zcrqc2Ftq64ZTrdHj5mN/rTGrxU="
            }
        ]
    }
},
"emails" : [ 
    {
        "address" : "Adammoisa@gmail.com",
        "verified" : false
    }
],
"profile" : {
    "first_name" : "Adam",
    "last_name" : "Moisa"
}

我想在电子邮件[i]地址

中搜索电子邮件

以下是我尝试过的内容(我使用的是Meteor; Meteor.users.find({})。fetch()将数据库中的所有用户作为上述格式的对象返回:< / p>

Meteor.users.find({"emails[0]address": "Adam"}).fetch();

我希望将上述对象作为&#34; Adam&#34;是电子邮件[0]地址

中的电子邮件

谢谢!

3 个答案:

答案 0 :(得分:0)

无需指定索引。

Meteor.users.find({"emails.address": "Adam"}).fetch();

答案 1 :(得分:0)

不需要指定索引,因此您可以这样做:

Meteor.users.find({"emails.address": "Adam"}).fetch();

但是,如果您确实想要使用特定索引,请执行以下操作:

Meteor.users.find({"emails[0].address": "Adam"}).fetch();

答案 2 :(得分:0)

想出来:

Meteor.users.find({"emails.address": "Adammoisa@gmail.com"}).fetch();

您可以执行emails.address,它会将任何地址键与您在电子邮件中任意数组中的值匹配。

(来自searchSource使用正则表达式使其适用于匹配的任何内容:

function buildRegExp(searchText) {
 // this is a dumb implementation
  var parts = searchText.trim().split(/[ \-\:]+/);
  return new RegExp("(" + parts.join('|') + ")", "ig");
}