2014-02-10 1 views
0

У меня есть коллекция Монго, которая имеет документы, которые выглядят, как показано ниже:Морфий - Запрос на основе поддокументе

{ 
"_id" : ObjectId("9873214jkhdkfjdsf8324"), 
"nm" : "test", 
"sts" : 1, 
"updby" : NumberLong(0), 
"tags" : [ 
    { 
     "name" : "women", 
     "rank" : 1, 
     "type" : 3 
    }, 
    { 
     "name" : "men", 
     "rank" : 1 
    }, 
    { 
     "name" : "clothing", 
     "rank" : 2, 
     "type" : 1 
    } 
] 

}

Я хочу, чтобы запросить коллекцию таким образом, что я хочу, чтобы все документы, которые имеют «name»: «women» и «type»: 3 внутри подкаталога тэгов каждого документа, который возвращается.

Я знаю, что запрос Монго должен быть что-то вроде этого:

db.collection.find("tags":{ 
      $all:[ 
       {"$elemMatch":{"name":"women","type":3}},    
      ]}) 

Я попытался с помощью «» hasthiselement предоставленного морфия, но я не в состоянии сформировать точный запрос, который я хочу.

getMongoDAORead().getDatastore().createQuery(test.class) 
       .field("tags").hasThisElement("name").equal("women"); 

Этот запрос не является правильным. Может ли кто-нибудь помочь мне сформировать правильный запрос?

ответ

5

Я установил это, выполнив следующие действия:

Я создал объект Метки класса и инициализируются его:

Tags tag = new Tags("women", null, 3); 

Query<MyClass> t = getMongoDAORead().getDatastore() 
     .createQuery(MyClass.class) 
     .field("ctags").hasThisElement(tag);