我需要对我的整个收藏集执行$group
操作。该小组阶段已达到100MB RAM使用量的上限。
$ group阶段的RAM限制为100 MB。默认情况下,如果阶段超出此限制,则$ group将产生错误。但是,要允许处理大型数据集,请将allowDiskUse选项设置为true以使$ group操作能够写入临时文件。
我不受RAM的限制,但是找不到增加内存使用限制的方法。 有人知道如何配置此限制吗?
将allowDiskUse
设置为true可以解决该问题,但是我认为整个操作会慢很多,我想找到一个更好的解决方案。
{
$group: {
_id: {
producer: "$producer",
dataset:"$dataset",
featureOfInterest:"$_id.featureOfInterest",
observedProperty:"$_id.observedProperty"
},
documentId: {$push:"$documentId"}
}
}
此$group
操作是对整个复杂对象(生产者和数据集)执行的。我知道此操作非常昂贵,因为“它需要在产生前先扫描整个结果集,而MongoDB将必须至少存储组中每个元素的指针或索引”。我宁愿$group
在这两个对象的uniqueId字段上。
我如何才能使用唯一ID将对象$ group,然后$project
整个对象呢?
我想在聚合管道的开头使用下面的group操作获得与上面的group操作相同的结果:
{
$group: {
_id: {
producer: "$producer.producerId",
dataset:"$dataset.datasetId",
featureOfInterest:"$_id.featureOfInterest",
observedProperty:"$_id.observedProperty"
},
documentId: {$push:"$documentId"}
}
}
答案 0 :(得分:1)
allowDiskUse
在MongoDB中,没有选择将聚合中的内存使用量增加到100mb以上,因此在繁重的管道中,因此您必须将标志设置为 true 。
但是
您可能对 MongoDB内存中存储引擎
感兴趣示例在命令行中使用内存存储引擎启动mongodb
mongod --storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>
Mongodb文档中的更多信息
https://docs.mongodb.com/manual/core/inmemory/
关于第二个问题-我不明白。请发布示例文档。