当我在 mongodb 中扫描一个集合并编辑所有项目时,我得到了这个问题:扫描计数器我可以大于cursor.count()。为什么会这样?有人能想出来吗?
db.baiduwords.find()。count()= 805280
db.baiduwords.find()。size()= 805280
但我去了1498400或更多。
import pymongo
if __name__=='__main__':
client = pymongo.MongoClient()
i = 0
collection = client.baike.baiduwords.find()
for item in collection:
i += 1
MajorClass = []
for cl in item['C']:
c = cl
while(1):
a = client.baike.baiduclass.find({'s':c})
if a.count():
a = a[0]
if a['f'] == u'Root':
MajorClass.append(c)
break
else:
c = a['f']
else:
break
item['MC'] = list(set(MajorClass))
client.baike.baiduwords.save(item)
if i%100 == 0:
print "%d/%d"%(i, collection.count())
PS:printShardingStatus:此数据库没有启用分片。
答案 0 :(得分:2)
当您保存项目时,可能会移动更新的文档,导致光标多次返回文档。
当游标返回文档时,其他操作可能会与查询交错:如果其中一些操作是导致文档移动的更新(在表扫描的情况下,由文档增长引起)或更改索引查询使用的索引上的字段;然后光标将多次返回同一文档。