Mongo在upserts上返回WriteResult:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
有什么办法可以从pymongo访问这些字段吗?我需要这个,因为更新总是在pymongo中返回none,我想知道我查询的文档是否被修改,或者即使它存在而没有进行额外的查询。你能告诉我这是怎么做到的吗?
P.S。我知道之前已经问过这个问题,但是几年前我在谷歌找到的所有东西都没有包含一个例子。
既然我们已经有了,那么有没有办法从upsert的结果中获取文档中的字段? (或至少是_id)
解决:正如Neil Lunn建议的那样,如果您希望从更新中获得更多数据,那么Bulk API就是您的选择。我只是想指出这个API的快速walkthrough。
答案 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中看到的“批量写入结果”规范相匹配,这与当前在标准驱动程序方法中使用的“遗留”实现的返回方式不同。