如何在一个请求中对mongo进行多个查询

时间:2020-11-06 18:12:03

标签: node.js mongodb mongoose

假设我有一个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是不匹配的查找条件?

目前,我仅看到一种选择:

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

有没有更好的方法来实现这种东西?

1 个答案:

答案 0 :(得分:0)

尝试一下:

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