我需要在MongoTemplate中提取一个子文档,但是我想不出怎么做。
我保存的文件是:
{
"_id" : "FooUser",
"_class" : "com.domain.User",
"tests" : [
{
"variant" : {
"_id" : "C",
"probability" : "0.5"
},
"experiment" : {
"$ref" : "experiment",
"$id" : "MyExperiment2"
}
},
{
"variant" : {
"_id" : "B",
"probability" : "0.5"
},
"experiment" : {
"$ref" : "experiment",
"$id" : "MyExperiment1"
}
}
]
}我只需要删除具有MyExperiment1的测试。执行以下命令可以工作:
db.user.update( {}, {$pull: { "tests":{"experiment.$id":"MyExperiment1"}}}, {multi: true} )我应该如何使用来写这个呢?
我试过以下几种方法,但不起作用:
this.mongoTemplate.updateMulti(new Query(), new Update().pull("tests", "{\"experiment.$id\":\"MyExperiment1\"}"), "user");谢谢。
发布于 2014-11-26 15:32:29
这似乎是可行的:
this.mongoTemplate.updateMulti(new Query(),
new Update().pull("tests", Query.query(Criteria.where("experiment.$id").is("MyExperiment1"))), USERS_COLLECTION_NAME);发布于 2016-07-26 09:40:38
另一个对我很好的解决方案是将BasicDBObject应用到pull方法的value param中。请参阅How to code with Spring data MongoDB for db.test.update({name:'abc'}, {$pull: {'child': {'age':10}}})
发布于 2021-12-23 21:48:02
这是我的解决方案:
拉子场
public Mono<Project> DeleteCritTemplArray(String id, String country) {
Query query = new Query();
query.addCriteria(Criteria.where("_id")
.is(id));
Update update = new Update();
update.pull("countryList", country);
return template
// findAndModify:
// Find/modify/get the "new object" from a single operation.
.findAndModify(
query, update,
new FindAndModifyOptions().returnNew(true), Project.class
);
}拉子对象
public Mono<ProjectChild> DeleteCritTemplChild(String id, String idch) {
Query query = new Query();
query.addCriteria(Criteria
.where("_id")
.is(id)
.and("tasks._id")
.is(idch)
);
Update update = new Update();
update.set("tasks.$", null);
return template
// findAndModify:
// Find/modify/get the "new object" from a single operation.
.findAndModify(
query, update,
new FindAndModifyOptions().returnNew(true), ProjectChild.class
);
}https://stackoverflow.com/questions/27152868
复制相似问题