【问题标题】:Mongodb : $in operator vs lot of single queriesMongodb:$in 运算符与大量单个查询
【发布时间】:2012-01-03 09:36:34
【问题描述】:

我知道 MongoDB 能够每秒处理大量请求,但是假设我必须查询给定集合的大量文档 _id;什么听起来更好:在 _id 属性上创建一个 $in 以及我想要获取的所有 id,或者循环 findOne 查询?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    我肯定会使用 $in 查询并提供一个 _id 数组。

    例子:

    db.collection.find({
        "key": {
            "$in": [
                ObjectId("xxx"),
                ObjectId("yyy"),
                ObjectId("zzz")
            ]
        }
    })
    

    为什么?

    • 如果循环,每个查询都会进行一定量的设置和拆卸,创建和耗尽游标会产生开销。
    • 如果您不在本地计算机上执行此操作,它还会为每个请求创建 tcp/ip 开销。您可以在本地使用域套接字。
    • “_id”上默认创建了一个索引,收集一组文档以在批处理请求中返回应该非常快,因此无需将其分解为更小的查询。

    如果您想查看,还有一些额外的文档 here

    【讨论】:

    • 如果 $in... 中有很多项目怎么办?比如 100 或 1,000?
    • @ewindsor 任何高达 1000 的东西通常都可以。之后,我会重新考虑您拥有的架构并开始预先计算数据。
    • $in 可以用于 JSON 对象数组吗?
    • 其实限额可以很高(甚至高达一百万),但主要取决于大小:stackoverflow.com/questions/5331549/…
    【解决方案2】:

    如果您想直接使用 MongoChef UI 进行查找,可以使用以下查询:

    字段:{$in:[/Naveen Kumar/i, /Naveen/i, /Garshakurthy/i]}}

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 1970-01-01
      • 2019-11-02
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2013-02-05
      • 1970-01-01
      相关资源
      最近更新 更多