我在Mongoid 5(以及MongoDB Ruby驱动程序)的Ruby on Rails应用程序中使用MongoDB 3.2。 MongoDB实例配置在单个VM上运行的开发分片集群(1个配置服务器,3个分片服务器)中。
我的应用程序收到以下错误:
{ $err: "Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.", code: 16945 }
为了解决这个问题,我修改了代码以提供allowDiskUse:true选项。但是,当启用它时,我会收到错误:
Mongo::Error::OperationFailure: unknown m/r field for sharding: allowDiskUse ()
我没有看到MongoDB中特别提到的任何内容允许在分片环境中限制使用DiskUse(引用here和here)。
目前尚不清楚为什么会出现这种限制(我假设有一个原因),或者是否有任何变通方法。
答案 0 :(得分:0)
这最终成了我的误解和错误。正如所料,阅读错误信息并注意细节是关键。原始错误消息来自聚合命令。在我的第一次尝试中,我非常盲目地将“allowDiskUse”选项应用于我的应用程序正在使用的所有MongoDB命令。我最终将它添加到mapreduce命令,它不需要allowDiskUse选项。让我感到震惊的是,在非分片环境中这种“工作”很好,但这更像是侥幸。
通过将“allowDiskUse”应用于聚合命令,一切都在单个服务器和分片设置中都能正常工作。