2012-07-24 3 views
24

Я следующую структуру документа:Монго дБ - Запрос Вложенный массив и объекты

{ 
    "_id":"12345", 
    "value":{ 
     "T":0, 
     "v":[ 
     { 
      "name":"JW", 
      "cost":100 
     } 
     ] 
    } 
} 

Как я запрашиваю ключ имя? Я попробовал точечную нотацию, но без удачи (я думаю, что это работает только два уровня)

+0

Если вы случайно сделали _группу by_, вам нужно использовать операцию '$ unind' в ключе' value.v', прежде чем вы сможете работать с полями 'name' /' cost'. –

ответ

29

Это не совсем ясно, что вы пробовали, но это должно работать, чтобы найти выше документ по name:

db.collection.find({ "value.v.name": "JW" }) 

Reference

+0

Спасибо, я уверен, что это не сработало для меня, возможно, я получил запрос неправильно. –

+3

Я не думаю, что вы можете использовать оператор точки в массиве. –

+1

@ SamuelO'Malley Я только что обновил ссылку ссылки, которая лучше показывает, что это поддерживается массивами. – JohnnyHK

12

Вы должны использовать $elemMatch оператор:

db.collection.find({ 
    'value.v': { 
     $elemMatch: { 
      name: 'JW', // "name == 'JW'" 
      cost : 100 //if you need "&& cost == 100" 
     } 
    } 
}); 

Mongo docs

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