pymongo更新/在文档中插入一个字典

时间:2017-11-16 14:28:17

标签: python python-3.x pymongo

如果该文档不存在,我想将dict作为字段的值插入文档(例如v);

db.table.update_one({'k': some_unique_key},
                    {'$set': {'v': {name: 'some_name'},
                    upsert=True) 

此外,如果文档存在,我想通过更新相同字段(v)的字典来更新文档,即向name: value添加一个v对,我想知道怎么做。

e.g。原始文件就像,

{'k': some_key, 'v': {'name_a': 'name_a_val'}}

再添加一个键:值对name_b:name_b_valv就像

{'k': some_key, 'v': {'name_a': 'name_a_val', 'name_b': 'name_b_val'}}

更新

这是我提出的解决方案

if not db.table.find_one({'k': some_unique_key}):
    db.table.insert_one({'k': some_unique_key, 'v': {'name_a': 'name_a_val'})
else:
    v_val_dict = db.table.find_one({'k': some_unique_key})['v']

    vat_cache.update_one({'k': some_unique_key},
                     {'$set': {'v': v_val_dict.update({'name_b': 'name_b_val'})}})

我想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

你必须使用dot notation。这将更新名为name_a的嵌套字段,或者如果它不存在,将在v内创建。

coll.update_one({'k': 'some_key'}, 
                {'$set': { 'v.name_a': 'name_a_val'}}, upsert=True)