我正在使用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}
1条答案
按热度按时间l7wslrjt1#
如果您只关心更新一个文档,则可以将
update
替换为find_one_and_update
:上面的代码将返回更新/插入的整个文档。此外,如果您只关心
_id
而不关心其他内容,则可以包含可选参数projection={"_id": True}
。更新多个记录的情况在本答案中涵盖:https://stackoverflow.com/a/45867153/11086614