MongoDB 在不影响现有文档的情况下更新插入,例如 Elasticsearch

MongoDB upsert without affecting existing documents, like Elasticsearch

在mongodbupdate中,upsert只是一个flag,表示文档不存在则创建,存在则更新

在 elasticsearch 中,可以单独指定一个 doc json,其中包含更新的字段,以及一个 upsert json,其中包含仅添加到新文档的字段。因此,upsert 中指定的字段不会影响现有文档。

示例:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"doc" : {
    "name" : "new_name"
},
"upsert" : {
  "is_new" : true
 }
}

因此,如果文档 1 存在,其名称将更改为 "new_name",但不会添加 "is_new" 字段。如果它不存在,它将有 "is_new" = true.

在 mongodb 中是否可行?

谢谢

是的。 $setOnInsert修饰符:

db.collection.update({ "_id": 1 },{ "$setOnInsert": { "field": 2 } },{ "upsert" true })

这意味着 $setOnInsert 只有 中的内容会在存在新文档时应用。其他 update modifiers 在插入和文档匹配时应用 "both"。