Mongodb:在pymong中得到upsert结果

2024-10-06 10:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

Mongo在upserts上返回WriteResult:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

我能从pymongo访问这些字段吗?我需要这个,因为更新总是在pymongo中返回none,我想知道我查询的文档是否被修改过,或者即使它存在而不进行额外的查询。你能告诉我怎么做吗?在

我知道以前有人问过这个问题,但那是几年前的事了,我在谷歌上找到的所有东西都没有包括一个例子。在

既然我们已经开始了,有没有办法从upsert的结果中获取文档中的字段?(或至少是id)

解决方法:正如neillunn建议的那样,如果你想从更新过程中获取更多的数据,那么批量API就是一个不错的选择。我只想指出这个API的快速walkthrough。在


Tags: 方法文档noneapiidmongo例子pymongo
1条回答
网友
1楼 · 发布于 2024-10-06 10:24:07

mongodb2.6及以上版本的较新mongodbshell实现实际上为.update()和{}等定义了shell助手方法,使用了可用的"Bulk operations API"

所以基本上,当shell连接到一个MongoDB 2.6或更高版本的实例时,“Bulk”方法是“在幕后”使用的。即使他们实际上一次只对一个文档执行操作,或者实际上只发出“一个”更新请求或类似请求。

通用驱动程序接口尚未跟上这一点,您仍然需要显式调用:

bulk = db.test.initialize_ordered_bulk_op()

bulk.find({}).upsert().update({ "$set" { "this": "that" } }

result = bulk.execute()

这里返回的“result”与您在shell中看到的“Bulk Write result”规范相匹配,这与标准驱动程序方法中当前使用的“遗留”实现的返回方式不同。

相关问题 更多 >