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"。
在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"。