mongodb 如何获取更新文档的_id?

but5z9lq  于 2023-05-06  发布在  Go
关注(0)|答案(1)|浏览(196)

我正在使用Pymongo读取和写入MongoDB集合。根据文档,update和update_one函数返回UpdateResult对象:https://pymongo.readthedocs.io/en/stable/api/pymongo/results.html#pymongo.results.UpdateResult
如果您使用upsert=true并且插入发生,则UpdateResult对象包含一个“upserted_id”字段,其中包含刚刚插入的文档的_id。我还想知道如果我更新现有文档,_id是什么。然而,据我从文档和Python测试中所知,如果更新现有文档,则不会返回_id。我错过什么了吗?为什么UpdateResult不想返回_id,不管它是更新的文档还是插入的文档?在执行数据库操作时,我打算用什么方法来找出哪些文档被更新了?
使用Python版本3.10.8。

  • 查看文档以查看Pymongo update_one的返回类型。
  • 已在本地运行以下查询:
client = MongoClient(connection_uri)
database = client["example_db"]
collection = database["sample_collection"]

# insert new existing record
result = collection.update_one(filter_query, update_operation, upsert=True)
print(result.upserted_id) # *******************

# update an existing record
result = collection.update_one(filter_query, update_operation, upsert=True)
print(result.upserted_id) # None

print(result.raw_result) # {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
l7wslrjt

l7wslrjt1#

如果您只关心更新一个文档,则可以将update替换为find_one_and_update

result = collection.find_one_and_update(
            filter=filter_query,
            update=update_operation,
            upsert=True,
            return_document=True,
        )
        
print(result["_id"])

上面的代码将返回更新/插入的整个文档。此外,如果您只关心_id而不关心其他内容,则可以包含可选参数projection={"_id": True}
更新多个记录的情况在本答案中涵盖:https://stackoverflow.com/a/45867153/11086614

相关问题