嗨,我有这种对象。
{
"_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);
但不幸的是在子阵列中,所以如果有人可以解释我怎么做,那就太棒了。提前谢谢。
答案 0 :(得分:0)
在这里,您可以使用聚合框架搜索电子邮件。
$ unwind 操作员会帮助您。
db.collection.aggregate([{$unwind:'$emails'},{$match:{'emails.address':{$eq:'myemail1@domain.com'}}}]);
参考文件:MongoDB unwind docs