【问题标题】:Mongo search for value of key in nested array [duplicate]Mongo在嵌套数组中搜索键的值[重复]
【发布时间】:2016-08-16 14:15:28
【问题描述】:

这是我的文件:

"_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"
}

我想在 emails[i]address 中搜索电子邮件

这是我尝试过的(我正在使用 Meteor;Meteor.users.find({}).fetch() 将数据库中的所有用户作为对象返回,格式如上):

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

我希望返回上述对象,因为“Adam”是 emails[0]address 中的电子邮件

谢谢!

【问题讨论】:

    标签: javascript arrays mongodb meteor mongodb-query


    【解决方案1】:

    想通了:

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

    你可以只做 emails.address ,它会将任何地址键与你在 emails 中任何数组中的值匹配。

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

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

    【讨论】:

      【解决方案2】:

      索引不需要指定,你可以这样做:

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

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

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

      【讨论】:

        【解决方案3】:

        无需指定索引。

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

        【讨论】:

          猜你喜欢
          • 2015-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          • 1970-01-01
          相关资源
          最近更新 更多