Mongodb:在pymongo获得upsert结果

时间:2014-07-19 09:50:24

标签: python mongodb pymongo

Mongo在upserts上返回WriteResult:

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

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

P.S。我知道之前已经问过这个问题,但是几年前我在谷歌找到的所有东西都没有包含一个例子。

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

解决:正如Neil Lunn建议的那样,如果您希望从更新中获得更多数据,那么Bulk API就是您的选择。我只是想指出这个API的快速walkthrough

1 个答案:

答案 0 :(得分:3)

MongoDB 2.6及更高版本中较新的MongoDB shell实现实际上为.update().insert()等定义了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()

此处返回的“结果”与您在shell中看到的“批量写入结果”规范相匹配,这与当前在标准驱动程序方法中使用的“遗留”实现的返回方式不同。