Pymongo不会更新字段

时间:2017-08-08 06:07:27

标签: python pymongo

我有一个包含多个字段的数据库。

{
    ...,
    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的新条目。我想要的是覆盖现有的记录。有什么指针吗?

1 个答案:

答案 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}]}