Pymongo:使用$ setOnInsert错误批量更新

时间:2014-10-17 15:32:12

标签: python mongodb pymongo

我正在尝试进行批量更新,同时保留特定字段的状态。 在我的代码中,我要么创建一个文档,要么添加到列表' stuff'。

#init bulk
data = [...]
bulkop = col.initialize_ordered_bulk_op()
for d in data:
   bulkop.find({'thing':d}).upsert().update({'$setOnInsert':{'status':0},'$push':{'stuff':'something'},'$inc': { 'seq': 1 }})
bulkop.execute()

然而,我在尝试时遇到错误。 错误:pymongo.errors.BulkWriteError:发生批处理操作错误

在没有$ setOnInsert':{' status':0}的情况下,它可以正常工作,但我需要这样做才能确保状态var没有得到更新。

1 个答案:

答案 0 :(得分:-1)

我认为您正在使用pymongo 3.x,以上代码可在pymongo 2.x上使用。试试这个...

from pymongo import MongoClient, UpdateMany
client = MongoClient(< connection string >)
db = client[test_db]
col = db[test]
docs = [doc_1,doc_2,doc_3,....,doc_n]

requests = [UpdateMany({ },{'$setOnInsert':{'status':0},"$set":{"$push":docs}}, upsert = True)]
result = col.bulk_write(requests)
print(result.inserted_count)

此处为空{}表示更新所有记录。

希望这对您有帮助...