Spring 数据 Mongo:upsert 更新了各种字段

Spring Data Mongo: upsert with various fields updated

我正在寻找使用 Spring 数据给出的 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);

我不明白这是否是我正在寻找的,是否有更好的方法。

我相信您正在寻找 $setOnInsert for 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/