我正在寻找使用Spring Data提供的API为Mongo Collection实现 upsert 操作的正确方法。
详细说明,我有以下用例。集合collection
的架构如下所示:
{
_id: "some_id",
field1: "value1",
field2: "value2",
subdocument1: {
// A subdocument with some fields
},
subdocument2: {
// A subdocument with some other fields
}
}
字段field1
和field2
始终存在,但subdocument1
和subdocument2
将在不同的时刻插入:一个在第一次插入期间,第二个在后续插入更新
我看到MongoTemplate
有upsert方法。使用这种方法,我必须建立自己的更新操作。
Query query = Query.query(Criteria.where("_id").is("some_id"));
Update.update("_id", "some_id")
.set("field1", "value1")
.set("field2", "value2)
.set("subdocument1", subdocumentObject);
mongoTemplate.upsert(query, update, Collection.class);
我无法理解这是否是我正在寻找的,以及是否有更好的方法。
感谢。
答案 0 :(得分:3)
我相信你所寻找的是$setOnInsert
subdocument1
。所以类似的东西应该适合你。
Query query = Query.query(Criteria.where("_id").is("some_id"));
Update update = Update.update("_id", "some_id")
.set("field1", "value1")
.set("field2", "value2")
.set("subdocument2", subdocumentObject2)
.setOnInsert("subdocument1", subdocumentObject1);
更多https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/