Mongo数据库搜索就像查询一样,但是在子数组中有标准

时间:2015-12-15 14:38:12

标签: mongodb search sub-array database

嗨,我有这种对象。

{
    "_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);   

但不幸的是在子阵列中,所以如果有人可以解释我怎么做,那就太棒了。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

$ unwind 操作员会帮助您。

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

参考文件:MongoDB unwind docs