Rails和mongoid返回重复记录以供查询

时间:2013-06-05 09:29:33

标签: mongodb ruby-on-rails-3.2 mongoid

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

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

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

1 个答案:

答案 0 :(得分:2)

默认情况下,mongodb中的游标为latent。这意味着如果在处理光标时进一步写入,则可能会或可能不会看到这些更新的结果。

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

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

(您也可以使用指定hint'_id' index选项。)