当前位置: 首页 > 知识库问答 >
问题:

MongoDB:在pymongo中获取upsert结果

鲍鸿波
2023-03-14

Mongo在upserts上返回WriteResult:

WriteResult({“nmatch”:1,“nUpserted”:0,“nModified”:1})

有什么办法可以从pymongo访问这些字段吗?我需要这个,因为更新总是在pymongo中不返回任何内容,我想知道我正在查询的文档是否被修改,或者即使它存在而不进行其他查询。你能告诉我如何做到这一点吗?

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

既然这样,有没有办法从upsert的结果中获取文档中的字段?(或者至少是_id)

已解决:正如Neil Lunn所建议的,如果您想从更新中获取更多数据,批量API是一个不错的方法。我只想指出这个API的快速走查。

共有1个答案

蒋原
2023-03-14

MongoDB 2.6及更高版本的新MongoDB shell实现实际上为<code>定义了shell助手方法。update()和。insert()等,使用“批量操作API”进行。

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

一般的驱动程序接口还没有赶上这一点,您仍然需要显式调用:

bulk = db.test.initialize_ordered_bulk_op()

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

result = bulk.execute()

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

 类似资料:
  • 问题内容: 我需要使用pymongo用python搜索ObjectId,但是我总是会收到此错误。有什么想法如何搜索? 问题答案: 我使用pymongo 2.4.1。

  • 问题内容: 我正在尝试在mongodb中执行查询日期,但结果始终为空。我的查询如下: //变量resultaMongo返回空。 Obs:我也尝试不使用.isoformat(),当我直接放入mongodb时,只有添加ISODate才返回结果。因此不会返回结果: 更重要的是,如果您编辑返回: 这是数据库中的记录序列: 如果我打印python的json变量,则会看到类似以下内容的内容: 我的Mongnd

  • 我需要使用pymongo用python搜索一个ObjectId,但我总是得到这个错误。你知道怎么搜索吗?

  • 问题内容: 我在查询mongoDB时尝试使用排序功能,但是失败了。相同的查询在MongoDB控制台中有效,但不适用于此处。代码如下: 我得到的错误如下: 我在其他地方找到了一个链接,该链接说如果使用pymongo,则需要在密钥的前面放置一个“ u”,但这也不起作用。任何其他人都可以使用它或这是一个错误。 问题答案: 在pymongo中,采用和作为参数。 因此,假设您要排序,那么您应该 对于多个字段

  • 问题内容: 我正在尝试使用ES作为MongoDB的索引。我已经成功地将它们集成在一起,但是我发现搜索API相当复杂且令人困惑。Java API也不太有用。 我可以找到完全匹配的内容,但是如何获得此结果?这是我的代码: 问题答案: 我不确定我是否理解您的问题。 如果要根据示例打印searchResponse的结果,则应为以下内容: 我正在使用Gson将Json响应转换为FireWall(POJO)。

  • 问题内容: 我正在尝试使用pymongo模块从URL中提取一个JSON文件并将其按原样发送到mongoDB。 我有以下代码 执行此操作后,出现此错误,引发TypeError(“ documents must be a non-empty list”)TypeError:文档必须为非空列表 理想情况下,我希望能够从url中提取json并更新mongoDB,因为此json文件每周都会更新。谢谢 问题答