我正在尝试使用id字段在我的分片集合中找到重复项,这就是这种模式 -
Set Sht = WbookCheck.Worksheets("DATA")
Sht.Activate
Range("A1").end(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
我使用了以下查询,但收到了“异常:$ group超出内存限制,但不允许外部排序。传递allowDiskUse:true以选择加入。”错误,即使我在查询中使用了“allowDiskUse:true”。
"id" : {
"idInner" : {
"k1" : "v1",
"k2" : "v2",
"k3" : "v3",
"k4" : "v4"
}
}
有没有其他方法可以获得我想要的东西,或者我应该在上述查询中传递的其他内容?感谢。
答案 0 :(得分:3)
首先在管道中运行$match
,以便只保留介于范围之间的让我们说id.idiInner.k1
的文档,这样您才能获取该范围的结果。由于您对id
键上的重复项感兴趣,因此所有重复的文档都将满足此条件。看看你应该缩小范围,然后在下一个范围内运行它,直到你覆盖所有文件。
如果它是你必须经常做的事情,自动化,通过声明范围,在循环中提供它们,保留每次运行的重复项并最终合并结果。
另一个快速黑客/技巧是绕过 mongos 并直接在每个分片中运行聚合。这样做会严格限制您的文档(假设平衡的分片)到docs / number_of_shards,您可以克服内存限制。在第二种方法中,我假设您的分片键是id键,但如果不是,那么这种方法将不起作用,因为相同的重复文档将分散在分片中。
答案 1 :(得分:3)
请在运行命令中使用allowDiskTrue。
,
请告诉我这是否适合您。