Подтвердить что ты не робот

Найти поддокумент в массиве с помощью mongodb

Я играю с сборкой примеров из биографии http://docs.mongodb.org/manual/reference/bios-example-collection, чтобы рассказать о запросах mongodb.

Я хочу получить информацию о наградах, выигранных _id: 1 в году: 1975.

Я пробовал несколько запросов, среди них

bios.find({
    "_id" : 1,
    "awards" : {
        "year" : 1975
    }
});

но я никогда не получаю правильный документ. Как получить этот документ в массиве?

4b9b3361

Ответ 1

Вы должны использовать dot notation:

bios.find({"_id" : 1, "awards.year" : 1975 });

Это довольно бессмысленный запрос, потому что у вас также есть _id в запросе, но я предполагаю, что из-за того, что вы играете с примером. Кроме того, вы говорите, что ищете награды с 1967 года, но код говорит 1975 год.

Если вы ищете "awards" : { "year" : 1975 }, mongodb будет искать точное соответствие всего вложенного документа awards. В этом случае это не то, что вы хотите. Кроме того, поскольку awards является массивом, это всегда будет false. Если бы вы захотели найти конкретный документ о награде в списке, $elemMatch, это будет путь.