我需要在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"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我只需要删除具有MyExperiment1的测试.执行以下命令有效:
db.user.update( {}, {$pull: { "tests":{"experiment.$id":"MyExperiment1"}}}, {multi: true} )
Run Code Online (Sandbox Code Playgroud)
我应该如何使用Spring MongoTemplate编写这个?
我尝试了以下,但不起作用:
this.mongoTemplate.updateMulti(new Query(), new Update().pull("tests", "{\"experiment.$id\":\"MyExperiment1\"}"), "user");
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有JSON喜欢:
{
"_id" : "1",
"_class" : "com.model.Test",
"itemList" : [
{
"itemID" : "1",
"itemName" : "Foo",
"resources" : [
{
"resourceID" : "1",
"resourceName" : "Foo Test1"
}, {
"resourceID" : "2",
"resourceName" : "Foo Test2"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要能够删除itemList的记录之一.我做了以下事情:
public void removeItemByID(String docID, String itemID) throws Exception {
MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate();
Query query = new Query(where("_id").is(docID).and("itemList.itemID").is(itemID));
mongoOperations.remove(query, Item.class);
Run Code Online (Sandbox Code Playgroud)
}
这种方法不起作用.但是,当我使用带有$ pull方法的BasicDBObject时,它工作正常!这些方法有什么区别!