0

我偶然发现了一个相当奇怪的问题。我的应用程序中有一个 mongo 集合,其中包含大约 4 800 000 条记录。我正在使用从该集合返回 2 400 000 条记录的查询。因此,我遍历它们并在每条记录上创建嵌入文档。当我查看我的日志时,我注意到迭代发生了超过 400 万次。我深入挖掘并发现,很多记录多次进入迭代。这意味着具有相同 ID 的记录在日志中多次出现在处理中。以下是查询:

MyModel.where({integer_array: {"$not" => {'$size' => 0}}}).all.each do |n|

非常奇怪的是,当我在 rails 控制台中运行时,MyModel.where({integer_array: {"$not" => {'$size' => 0}}}).count我得到大约 2400000。我在 rails 3.2.13、mongoid 3.0.21 和 mongodb 2.4.0 上运行。

4

1 回答 1

2

mongodb 中的游标默认是潜在的。这意味着,如果在您处理游标时进一步写入,那么您可能会也可能不会看到这些更新的结果。

当添加更多数据或修改现有数据时,对象可能会在集合中移动,这可能会导致它们多次出现在光标中(实际行为未指定)。

您可以在查询中使用 pass mongoid快照选项来解决此问题。

(您也可以使用指定'_id' 索引的提示选项。)

于 2013-06-05T12:55:26.750 回答