最新消息:20210917 已从crifan.com换到crifan.org

【已解决】PyMongo中更新已有单个记录的数据

MongoDB crifan 4075浏览 0评论

折腾:

【记录】MongoDB中本地写代码实现数据合并和迁移

期间,现在需要把更新后的字典数据更新到之前已有的记录中。

看了:

collection – Collection level operations — PyMongo 3.7.2 documentation

还是没太懂:

<code>&gt;&gt;&gt; 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中,是否要设置所有的值,还是只是单独新增的字段?

$set — MongoDB Manual

通过:

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=&lt;pymongo.results.UpdateResult object at 0x1081ce948&gt;
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

具体细节见:

$set — MongoDB Manual

比如此处希望增加一个字段,则代码为:

<code>updateResult = mongoSrcCollection.update_one(filter={"_id": curSrcBookInfo["_id"]}, update={"$set": {"mergedId": mergedId}})
</code>

即可。

转载请注明:在路上 » 【已解决】PyMongo中更新已有单个记录的数据

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
92 queries in 0.172 seconds, using 23.40MB memory