Python pymongo中带修改的游标迭代
以下是我的片段:Python pymongo中带修改的游标迭代,python,cursor,pymongo,Python,Cursor,Pymongo,以下是我的片段: mongo_db = pymongo.MongoClient('mongodb://p2buser:p2bpass@192.168.1.102:27018')['YYPei'] brands = mongo_db.fqBrands.find() count= brands.count() i = 0 for brand in brands: i += 1 mongo_db.fqBrands.update({"_id": brand['_id']},{'$set'
mongo_db = pymongo.MongoClient('mongodb://p2buser:p2bpass@192.168.1.102:27018')['YYPei']
brands = mongo_db.fqBrands.find()
count= brands.count()
i = 0
for brand in brands:
i += 1
mongo_db.fqBrands.update({"_id": brand['_id']},{'$set': {'enabled': 1})
print count
print i
fqBrands集合中有1603个元素,计数等于它。 而i应该是1603 但结果是i值1687
所以这让我有点困惑,我怎样才能确定它有什么问题。我不知道“I”值不同的原因。
但是有一种更好的方法来更新所有文档:
mongo_db = pymongo.MongoClient('mongodb://p2buser:p2bpass@192.168.1.102:27018')['YYPei']
brands = mongo_db.fqBrands.find()
count_before= brands.count()
brands.update({},{'$set': {'enabled': 1}, {multi: true})
count_after= brands.count()
print count_before
print count_after
如何打印品牌。计数(使用限制和跳过=真)
打印?此外,您是否使用副本集?此外,如果您删除update
语句,您是否会打印相同的结果?@alecxe我会得到相同的行为(尽管我使用批量更新,并且有数百万条记录)。有了_limit _和_skip没有区别。没有更新,它就不会发生。数据库上没有非默认设置(没有分片/没有副本集等)。如果忽略I>=count
的迭代,几乎所有(但不是所有)记录都会更新。还尝试在db上运行验证(true),但没有效果)。我怀疑光标不知怎么被修改了。mongodb v2.4.9,pymongo 3.4.0。