У меня есть коллекция с записями, которые выглядят так:
{
"userid": 1,
"contents": [
{ "tag": "whatever", "value": 100 },
{"tag": "whatever2", "value": 110 }
]
}
Я хотел бы иметь возможность запрашивать эту коллекцию и возвращать только одну часть массива: ту, которая соответствует запросу. Я пытаюсь использовать позиционный оператор $ для этого, но пока это не сработало.
Вот точнее, что я хотел бы сделать:
collection.find({'contents.tag':"whatever"},{'contents.$.value':1})
В результате я ожидаю sth только со значением, соответствующим записи в массиве, который соответствует запросу, что в данном случае равно 100.
Вы знаете, что случилось? Я подумал, что, возможно, оператор $ можно использовать только для обновления, а не для запросов. Кто-нибудь в курсе?
Спасибо !
collection.find({'contents.tag':'whatever'},{'contents.value':1})
и не нужен позиционный оператор. Тем не менее (как уже упоминал Райан в своем ответе) необходимо вытащить поле из возвращаемого массива (который также будет включать_id
документа) на стороне приложения. Недостатком является тот факт, чтоfindOne
илиlimit(1)
относительно вашего вложенного массива не будут работать, что не будет проблемой, если вы не ожидаете более 1 результата. - person proximus   schedule 08.06.2011