mongodb - 具有特定 Upsert 行为的 MongoDB UpdateOne
问题描述
这是我正在寻找的行为:
1-更新数据库,按唯一ID过滤,以防不存在创建新文档(所有字段)。
2- 如果文档存在,则仅更新一个特定字段。
我遇到的问题是,如果我使用:
collection.update_one( {'id':document['id']},
{"$set":{'field_to_update':document['field_to_update']}}, upsert:True)
每当文档不存在时,它将创建一个新文档,但仅以 field_to_update 作为其内容。而且我只需要更新一个字段(这是因为有些字段变化很大,我不想更新),但在另一种情况下创建一个完整的文档。
有谁如何做到这一点?
问候。
解决方案
当由于 upsert 插入新文档时,您可以使用$setOnInsert添加额外字段,如果没有,请尝试将其与 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,
})
推荐阅读
- java - 加强 Java Http 请求标头操作
- angular - 将错误数据从一个组件传递到另一个组件
- python - 我有一个关于在 python 烧瓶中执行的问题
- reactjs - 如何将 HTML 元素添加到 JavaScript 对象并在反应中使用
- javascript - Tempermonkey 脚本:同人圈登录
- php - 类方法PHP内的常量范围
- python - Python JSON 多个 API 请求
- spring - Spring p 命名空间在 IntelliJ 上显示“URI 未注册”错误
- python - 如何使用密码学获取 x509 证书的私钥
- oracle - ORACLE 在同一张表中使用 select 语句插入值