如果该文档不存在,我想将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_val
到v
就像
{'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'})}})
我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:2)
你必须使用dot notation。这将更新名为name_a
的嵌套字段,或者如果它不存在,将在v
内创建。
coll.update_one({'k': 'some_key'},
{'$set': { 'v.name_a': 'name_a_val'}}, upsert=True)