allowDiskUse是否对mongodb中的find()方法有效?

时间:2018-12-02 20:29:51

标签: mongodb

我正在尝试测试运行缓慢的查询的一些理论-因此,我想要查询运行缓慢。因此,我在集合上省略了索引。当我运行db.mycollection.find({myfield: /.abc./}).sort({myfield2: 1}, {allowDiskUse: true})方法时,出现以下错误...

Error: error: {
        "ok" : 0,
        "errmsg" : "Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.",
        "code" : 96,
        "codeName" : "OperationFailed"
}

好的。我想继续在磁盘上进行排序,但似乎聚合框架命令'allowDiskUse:'对find()方法没有任何作用。我收到同样的错误。

“ allowDiskUse”在与find()一起使用时是否有效,或者仅在与Aggregation Framework一起使用时有效?

我似乎找不到任何说明它是特定于框架的文档,但是同样,它似乎不适用于find()。也许这是一个宽松的答案。我想我正在寻找一个更具体的答案。

2 个答案:

答案 0 :(得分:1)

  

'allowDiskUse'在与find()一起使用时是否有效?或者仅在与Aggregation Framework一起使用时有效吗?

allowDiskUse选项特定于聚合框架。

  

排序操作所使用的RAM超过了33554432个最大字节。

您可以从sort()查询中删除find(),以避免碰到in-memory sort limit

  

想要查询运行缓慢。

虽然这不是一个典型的目标,但有一些使该查询速度变慢的选择:

  • 使用hint()force a collection scan或非最佳索引选择(但排序限制仍然适用)

  • 创建您的regex query case-insensitive{myfield: /abc/i}

  • 使用cgroups或虚拟机限制mongod可用的资源。有限的RAM(您的工作集明显大于RAM)和缓慢的磁盘会导致缓慢的查询。

答案 1 :(得分:0)

在MongoDB 4.4版中,此功能已添加:cursor.allowDiskUse()

allowDiskUse()具有以下形式:

db.collection.find(<match>).sort(<sort>).allowDiskUse()