0

嗨,我有这种物体。

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

但不幸的是,它在子阵列中,所以如果有人能解释我如何做到这一点,那就太好了。先感谢您。

4

1 回答 1

0

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

$unwind运算符可以帮助您。

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

参考文档:MongoDB unwind docs

于 2015-12-15T14:51:55.593 回答