小编典典

Spring Data Mongo:更新了各个领域的upsert

java

我正在寻找使用Spring Data提供的API对Mongo集合实施 upsert 操作的正确方法。

详细地,我有以下用例。集合的架构collection如下所示:

{
  _id: "some_id",
  field1: "value1",
  field2: "value2",
  subdocument1: {
    // A subdocument with some fields
  },
  subdocument2: {
    // A subdocument with some other fields
  }
}

字段field1field2总是存在的,但subdocument1subdocument2会在不同的时刻被插入:一个第一插入期间,第二与随后的更新。

我看到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);

我不知道这是我在寻找什么,还有没有更好的方法。


阅读 367

收藏
2020-11-30

共1个答案

小编典典

我相信你正在寻找的是$setOnInsertsubdocument1。所以类似的东西应该为您工作。

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/

2020-11-30