【问题标题】:Mongo db search like query, but with criteria in the subarrayMongodb 搜索类似查询,但在子数组中有条件
【发布时间】:2016-03-21 09:44:05
【问题描述】:

您好,我有这种物品。

{
    "_id" : "wavQwJn5ZGQw2sTqb",
    "createdAt" : ISODate("2015-12-15T13:55:21.526Z"),
    "services" : {
        "password" : {
            "bcrypt" : "passhash"
        },
        "resume" : {
            "loginTokens" : [ 
                {
                    "when" : ISODate("2015-12-15T13:56:48.837Z"),
                    "hashedToken" : "tokenhash"
                }
            ]
        }
    },
    "profile" : {
        "name" : "First Name LastName"
    },
    "emails" : [ 
        {
            "address" : "myemail1@domain.com",
            "verified" : false
        },
        {
            "address" : "myemail2@domain.com",
            "verified" : false
        }
    ]
}

我必须通过他们的电子邮件或个人资料名称搜索用户,但是这封电子邮件在子数组中,每个元素都有一个小对象,个人资料是一个对象,所以我在这里真的很困惑。

例如,如果电子邮件在主要对象中,我可以这样做:

let selector = {
    'email' : { '$regex' : '.*' + searchString || '' + '.*', '$options' : 'i' },
}

Meteor.users.find(selector, options);   

但不幸的是,它在子数组中,所以如果有人能解释我如何做到这一点,那就太好了。提前谢谢你。

【问题讨论】:

    标签: mongodb search sub-array database


    【解决方案1】:

    在这里,您可以使用聚合框架搜索电子邮件。

    $unwind 运算符可以帮助您。

    db.collection.aggregate([{$unwind:'$emails'},{$match:{'emails.address':{$eq:'myemail1@domain.com'}}}]);
    

    参考文档:MongoDB unwind docs

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2015-06-29
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多