Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有特定Upsert行为的MongoDB UpdateOne_Mongodb - Fatal编程技术网

具有特定Upsert行为的MongoDB UpdateOne

具有特定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作为其内容。我只需要更新一个字段(这是因

这就是我想要的行为:

1-更新数据库,按唯一id过滤,以防不存在创建新文档(所有字段)

2-如果文档存在,只更新一个特定字段

我遇到的问题是,如果我使用:

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,我明白了,谢谢。如果以下答案中的一个回答回答了您的问题,即本网站的工作方式,您将“接受”/“向上投票”答案,更多信息如下:。但前提是你的问题真的得到了回答。如果没有,请考虑在问题上增加更多细节。