node.js - 如何在一个请求中对 mongo 进行多个查询
问题描述
假设我有一个集合Person{email: 'actual email', ..other data}
并想要查询是否Person
存在给定email
并检索它的数据,如果不存在则获取空值。
如果我想这样做一次就没有问题,只需通过mongoose
使用Person.findOne()
或其他方式进行查询。
但是,如果我必须检查 25-100 封给定的电子邮件怎么办?当然,我可以向 mongodb 发送大量请求并检索数据,但它似乎是一个庞大的网络。
有没有一种好的和高性能的方法来查询一个带有多个子句的mongodb,比如findBatch([{email: 'email1'}, {email: 'email2'}...{email: 'emailN'} ])
在[document1,null,document3,null, documentN]
哪里null
找到不匹配的查找条件?
目前我只看到一个选项:
- 使用单个
{email: $in: [] }
查询进行大量查找,并通过应用程序逻辑中的服务器端搜索进行匹配。缺点:如果您有多个搜索条件,则非常麻烦且容易出错。
有没有更好的方法来实现这样的事情?
解决方案
试试这个:
- 用您的查询数组替换 arrayOfEmails
- 将 emailField 替换为数据库文档中的实际名称
db.collName.aggregate([
{
"$match" : {
"emailField" : {
"$in" : arrayOfEmails
}
}
},
{
"$group" : {
"_id" : null,
"docs" : {
"$push" : {
"$cond" : [
{
"$in" : [
arrayOfEmails,
[
"$emailField"
]
]
},
"$$ROOT",
null
]
}
}
}
}
])
推荐阅读
- google-cloud-platform - Kubernetes Engine 无法从非私有/GCR 存储库中提取映像
- tensorflow - 将 Darkflow tensorflow 模型移植到 Tensorflow Android 相机检测演示
- mongodb - MeteorJS 应用安全
- java - 实时自我监控 Java 进程的内存
- scala - AuthenticationException Neo4j Spark 流式传输
- angular - Angular 5 自动对焦
- java - SQLite 1:M 关系
- c# - 将 Umbraco IContent 转换为 JSON
- java - 使用套接字将图像从客户端发送到服务器
- html - 如果有关用户的 ID 存在,如何隐藏问题