我有一个使用mongo作为数据存储的rails应用程序。 Mongo配置了3个查询路由器和16个分片。当我做类似的事情时:
count = Item.where(:confirmed => true).count
我得到大约800K物品。但是,当我运行批处理以实际遍历项目时,计数要小得多:
batch_size = 10000
offset_count = 0
completed_count = 0
# prime the pump
q = Item.where(:confirmed => true).limit(batch_size).skip(offset_count * batch_size).to_a
while q.count > 0
# do something
completed_count += q.count
offset_count += 1
q = Item.where(:confirmed => true).limit(batch_size).skip(offset_count * batch_size).to_a
end
# here, completed count is << count (where "count" is the initial .where count)
知道这里发生了什么吗? mongo是否估计总数而不是从索引计算它?
FWIW,有一个关于以下项目的索引:已确认,我在运行之前重新编制索引,以确保没有索引损坏。
感谢您的帮助。 凯文
答案 0 :(得分:0)