首页 > 解决方案 > 如何在一个请求中对 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找到不匹配的查找条件?

目前我只看到一个选项:

  1. 使用单个{email: $in: [] }查询进行大量查找,并通过应用程序逻辑中的服务器端搜索进行匹配。缺点:如果您有多个搜索条件,则非常麻烦且容易出错。

有没有更好的方法来实现这样的事情?

标签: node.jsmongodbmongoose

解决方案


试试这个:

  • 用您的查询数组替换 arrayOfEmails
  • 将 emailField 替换为数据库文档中的实际名称
db.collName.aggregate([
    {
        "$match" : {
            "emailField" : {
                "$in" : arrayOfEmails
            }
        }
    },
    {
        "$group" : {
            "_id" : null,
            "docs" : {
                "$push" : {
                    "$cond" : [
                        {
                            "$in" : [
                                arrayOfEmails,
                                [
                                    "$emailField"
                                ]
                            ]
                        },
                        "$$ROOT",
                        null
                    ]
                }
            }
        }
    }
])

推荐阅读