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
}
}
字段 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);
我不明白这是否是我正在寻找的,是否有更好的方法。
我相信您正在寻找 $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/
我正在寻找使用 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
}
}
字段 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);
我不明白这是否是我正在寻找的,是否有更好的方法。
我相信您正在寻找 $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/