折腾:
期间,现在需要把更新后的字典数据更新到之前已有的记录中。
看了:
collection – Collection level operations — PyMongo 3.7.2 documentation
还是没太懂:
<code>>>> result =db.test.update_one({'x': 1},{'$inc':{'x': 3}}) </code>
去写代码:
<code>curSrcBookInfo["mergedId"] = mergedId mongoSrcCollection.update_one(filter={"_id": curSrcBookInfo["_id"]}, update=curSrcBookInfo) </code>
需要去搞清楚:
update_one
的具体写法。
pymongo update_one
collection – Collection level operations — PyMongo 3.7.2 documentation
db.collection.updateOne() — MongoDB Manual
python – How to update values using pymongo? – Stack Overflow
python – pymongo update_one(), upsert=True without using $ operators – Stack Overflow
https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/
“update
document
The modifications to apply.
Use Update Operators such as $set, $unset, or $rename.
Using the update() pattern of field: value for the update parameter throws an error.”
感觉是用: $set ?
但是set中,是否要设置所有的值,还是只是单独新增的字段?
通过:
https://docs.mongodb.com/manual/reference/operator/update/set/#examples
例子看出:
可以直接更新对应字段,不用所有字段的原有值都传入
所以去写成:
<code>updateResult = mongoSrcCollection.update_one(filter={"_id": curSrcBookInfo["_id"]}, update={"$set": {"mergedId": mergedId}}) </code>
是可以的:
再去mongod工具中看看对应数据:
也是可以看到的:
然后再打印两个result的属性:
<code>updateResult = mongoSrcCollection.update_one(filter={"_id": curSrcBookInfo["_id"]}, update={"$set": {"mergedId": mergedId}}) logging.info("updateResult=%s", updateResult) matched_count = updateResult.matched_count modified_count = updateResult.modified_count logging.info("matched_count=%s, modified_count=%s", matched_count, modified_count) </code>
输出:
<code>20181026 01:39:31 mergeBookToMain.py:328 INFO updateResult=<pymongo.results.UpdateResult object at 0x1081ce948> 20181026 01:39:31 mergeBookToMain.py:331 INFO matched_count=1, modified_count=1 </code>
【总结】
此处,Pymongo中update_one,内部的逻辑和参数是和MongoDB的
db.collection.updateOne() — MongoDB Manual
的参数逻辑一致。
其中update的参数的写法,是:$set, $unset, 或$rename
具体细节见:
比如此处希望增加一个字段,则代码为:
<code>updateResult = mongoSrcCollection.update_one(filter={"_id": curSrcBookInfo["_id"]}, update={"$set": {"mergedId": mergedId}}) </code>
即可。
转载请注明:在路上 » 【已解决】PyMongo中更新已有单个记录的数据