我有一个包含多个字段的数据库。
{
...,
history : [
{
id : (a unique 32 character id),
....
}
],
...
}
我想要做的是使用一些新的和一些更新的字段更新history
中的单个对象与id
。
我试着这样做
single_history_object.update(new_history_object)
# here the id of both single_history_object and new_history_object are same.
collection.update_one({}, {
'$set' : history_object
})
其中history_object包含更新的single_history_object。
但它会在history
列表中创建一个具有相同id
的新条目。我想要的是覆盖现有的记录。有什么指针吗?
答案 0 :(得分:0)
使用$ positional operator更新数组元素。
这将更新列表中的整个历史对象
更新前:
{'历史':[{' id':' id1',' key1':1},{' id':' id2',' key1':2}]}
collection.update_one({'history.id': 'id1'}, {
'$set' : {'history.$': {'id': 'id3', 'key3': 3}}
})
更新后:
{'历史':[{' id':' id3',' key3':3},{' id':' id2',' key1':2}]}
这将更新历史记录对象中的特定键
更新前:
{'历史':[{' id':' id1',' key1':1},{' id':' id2',' key1':2}]}
collection.update_one({'history.id': 'id1'}, {
'$set' : {'history.$.key1': 5, 'history.$.key2': 2}
})
更新后: {'历史':[{' id':' id1',' key1':5,' key2': 2},{' id':' id2',' key2':2}]}