【问题标题】:How to prevent PyMongo from mutating inserted dict?如何防止 PyMongo 改变插入的字典?
【发布时间】:2018-02-12 21:59:14
【问题描述】:

如果文档没有 _id 字段,MongoDB 会自动为插入的文档分配一个适当的 _id 字段,我明白了,这对我来说很好。

但是为什么 pymongo 通过添加 _id 字段来改变插入的 dict 呢? 我想在插入后使用插入的字典,额外的 _id 字段有点问题。

我知道我可以使用 dict.pop('_id') 删除 _id 字段,但如果它是文档列表(用于 insert_many),则需要额外的努力。

我的问题是,有没有办法防止插入的dictList[dict] 被_id 字段变异

【问题讨论】:

    标签: python mongodb mongodb-query pymongo


    【解决方案1】:

    您可以通过插入字典或字典列表的副本来防止这种情况

    In [1]: from copy import deepcopy
    
    In [2]: from pymongo import MongoClient
    
    In [3]: data = [{'a': 2}, {'a': 3}]
    
    In [4]: with MongoClient() as client:
       ...:     client.test.collection.drop()
       ...:     result =  client.test.collection.insert_many(deepcopy(data))
       ...:     
    
    In [5]: result.inserted_ids
    [ObjectId('5a819d34d99e830381e025b0'), ObjectId('5a819d34d99e830381e025b1')]
    
    In [6]: data
    Out[6]: [{'a': 2}, {'a': 3}]
    

    【讨论】:

    • 还有其他解决方法。我需要完全禁用此行为,可能使用 pymongo 参数。
    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多