具有特定Upsert行为的MongoDB UpdateOne
这就是我想要的行为: 1-更新数据库,按唯一id过滤,以防不存在创建新文档(所有字段) 2-如果文档存在,只更新一个特定字段 我遇到的问题是,如果我使用:具有特定Upsert行为的MongoDB UpdateOne,mongodb,Mongodb,这就是我想要的行为: 1-更新数据库,按唯一id过滤,以防不存在创建新文档(所有字段) 2-如果文档存在,只更新一个特定字段 我遇到的问题是,如果我使用: collection.update_one( {'id':document['id']}, {"$set":{'field_to_update':document['field_to_update']}}, upsert:True) 当文档不存在时,它将创建一个新文档,但仅使用字段_to_update作为其内容。我只需要更新一个字段(这是因
collection.update_one( {'id':document['id']},
{"$set":{'field_to_update':document['field_to_update']}}, upsert:True)
当文档不存在时,它将创建一个新文档,但仅使用字段_to_update作为其内容。我只需要更新一个字段(这是因为有些字段变化很大,我不想更新),但另一种情况是创建一个完整的文档
有人知道如何做到这一点吗
注意。您可以使用$setOnInsert在由于upsert而插入新文档时添加额外字段,请尝试将其与UpdateOne一起使用。如果没有,您可以使用如下示例所示的查询
collection.findAndModify({
'query': { 'id':document['id'] },
'update': {
"$set":{'field_to_update':document['field_to_update']},
'$setOnInsert': {
'field_to_add': document['field_to_add'],
'field_to_add_more': document['field_to_add_more']
}
},
'new': True,
'upsert': True,
})
我认为你必须有条件地这样做。我相信,您正在使用PyMongo驱动程序?是的,PyMongo,我明白了,谢谢。如果以下答案中的一个回答回答了您的问题,即本网站的工作方式,您将“接受”/“向上投票”答案,更多信息如下:。但前提是你的问题真的得到了回答。如果没有,请考虑在问题上增加更多细节。