Spring Data Mongo:已更新各种字段的upsert

时间:2017-04-06 07:28:18

标签: java mongodb spring-data-mongodb

我正在寻找使用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
  }
}

字段field1field2始终存在,但subdocument1subdocument2将在不同的时刻插入:一个在第一次插入期间,第二个在后续插入更新

我看到MongoTemplateupsert方法。使用这种方法,我必须建立自己的更新操作。

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);

我无法理解这是否是我正在寻找的,以及是否有更好的方法。

感谢。

1 个答案:

答案 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/