我正在寻找使用Spring Data提供的API对Mongo集合实施 upsert 操作的正确方法。
详细地,我有以下用例。集合的架构collection如下所示:
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会在不同的时刻被插入:一个第一插入期间,第二与随后的更新。
field1
field2
subdocument1
subdocument2
我看到MongoTemplate有和upsert方法。使用这种方法,我必须构建自己的更新操作。
MongoTemplate
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);
我不知道这是我在寻找什么,还有没有更好的方法。
我相信你正在寻找的是$setOnInsert对subdocument1。所以类似的东西应该为您工作。
$setOnInsert
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/