假设我有一个的集合,Person{email: 'actual email', ..other data}
并且想查询是否Person
存在给定的email
,如果要获取给定的,则检索它的数据,否则返回null。
如果我想这样做一次,那就没问题了,只是通过mongoose
使用Person.findOne()
或其他方式进行查询。
但是,如果我必须检查25-100封给定的电子邮件怎么办?当然,我可以向mongodb发送大量请求并检索数据,但这似乎是一个庞大的网络。
是否有一个良好和查询与单批次多像一个条款的mongodb perfomant的方式findBatch([{email: 'email1'}, {email: 'email2'}...{email: 'emailN'} ])
,得到了作为结果[document1,null,document3,null, documentN]
,其中null
的不匹配查找审核规定?
目前,我仅看到一种选择:
{email: $in: [] }
查询的巨大发现,并通过应用程序逻辑中服务器端的搜索进行匹配。缺点:如果您有多个搜索条件,则非常麻烦且容易出错。有没有更好的方法来实现这种事情?
尝试这个:
db.collName.aggregate([
{
"$match" : {
"emailField" : {
"$in" : arrayOfEmails
}
}
},
{
"$group" : {
"_id" : null,
"docs" : {
"$push" : {
"$cond" : [
{
"$in" : [
arrayOfEmails,
[
"$emailField"
]
]
},
"$$ROOT",
null
]
}
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句