2014-02-06 1 views
0

Я пытаюсь сделать что-то так же просто, как вернуть подмашину документа. Таким образом, мой запрос:Проекция Mongodb, возвращающая заданную позицию

db.mydocs.findOne({_id:ObjectId("af7a85f758e338d762000012")},{'house.0.room.4.windows':1}); 

Я хочу вернуть только эту ценность. Но я получаю пустую структуру. Я знаю, что могу сделать это с помощью $ slice. Но, насколько я знаю, я не могу сделать это для подмассивов. Я имею в виду: {'house':{'$slice':0}} будет работать. Но я не знаю, как получить дом 0 и номер 4.

ответ

0

Вы должны будете использовать прикованных $slice операторы для этой работы:

db.mydocs.findOne(
    {_id:ObjectId("af7a85f758e338d762000012")}, 
    {"house" : {$slice : [0,1]},  // house.0 
    "house.room" :{$slice : [3,1]}, // house.0.room.4 
    "house.room.windows" : 1});  // house.0.room.4.windows 

Полученный документ будет выглядеть следующим образом, т.е. массивы еще массивы (что полезно при отображении сильно типизированных языках):

house : [ { room : [ { windows : foo } ] } ] 

из the documentation:

Совет: MongoDB не поддерживает выступы частей массивов за исключением при использовании $elemMatch и $slice операторов проекции.

P.S: Я нахожу это раздражает, что house и room массивы, но имеют особые названия, особ. потому что windowsесть множественное число.

+0

это был быстрый поддельный пример ... – de3