2014-11-26 3 views
6

Мне нужно вытащить субдокумент в MongoTemplate, но не могу понять, как это сделать.MongoTemplate pull subdocument

Мой сохраненный документ является:

{ 
    "_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}) 

Как я должен написать это с помощью Spring MongoTemplate?

Я попытался следующие, но не работает:

this.mongoTemplate.updateMulti(new Query(), new Update().pull("tests", "{\"experiment.$id\":\"MyExperiment1\"}"), "user"); 

Спасибо.

ответ

7

Кажется, это работает:

this.mongoTemplate.updateMulti(new Query(), 
     new Update().pull("tests", Query.query(Criteria.where("experiment.$id").is("MyExperiment1"))), USERS_COLLECTION_NAME); 
+0

благодарит! –

Смежные вопросы