假设我有一个Person{email: 'actual email', ..other data}
的集合,并想查询给定的Person
是否存在email
,如果存在则检索它的数据,否则返回null。
如果我要这样做一次,那就没问题,只需使用mongoose
或其他方式通过Person.findOne()
进行查询。
但是,如果我必须检查25-100封给定的电子邮件怎么办?当然,我可以向mongodb发送大量请求并检索数据,但这似乎是一个庞大的网络。
是否有一种好方法来查询单批中包含多个子句的mongodb,例如findBatch([{email: 'email1'}, {email: 'email2'}...{email: 'emailN'} ])
并得到结果[document1,null,document3,null, documentN]
,其中null
是不匹配的查找条件?>
目前,我仅看到一种选择:
{email: $in: [] }
查询即可找到大量结果,并且可以通过在应用程序逻辑中在服务器端进行搜索来进行匹配。缺点:如果您有多个搜索条件,则非常麻烦且容易出错。有没有更好的方法来实现这种东西?
答案 0 :(得分:0)
尝试一下:
db.collName.aggregate([
{
"$match" : {
"emailField" : {
"$in" : arrayOfEmails
}
}
},
{
"$group" : {
"_id" : null,
"docs" : {
"$push" : {
"$cond" : [
{
"$in" : [
arrayOfEmails,
[
"$emailField"
]
]
},
"$$ROOT",
null
]
}
}
}
}
])