Запрос документа из массива внутри коллекции mongoDB - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь получить данные из коллекции моего MongoDB, у меня следующая структура:

проверьте здесь структуру JSON.

Таким образом, в основном я хочу, например, нацелить объект на id: 456 ОТ events, где верхний уровень _id равен == 2, и вернуть только этот объект.

Я пробовал aggregate(), findOne(), но ни один из них не работает так, как я хочу ... любая помощь будет оценена.

Примеры, которые я пробовал:

db.collectionName.findOne({ _id: '2', events: { $elemMatch: { _id: 456 } }})

Я не могу изменить следующую структуру, потому что _id верхнего уровня на самом деле userId, и я хочу получить все события для пользователя с помощью _id: '2', например.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете начать с фильтрации по _id, чтобы отфильтровать как можно больше.Затем вы можете использовать $ unwind , чтобы получить одно событие для каждого документа и применить другое совпадение для вложенного _id.На последнем шаге вы можете использовать $ replaceRoot , чтобы получить только вложенный документ, попробуйте:

Model.aggregate([
    { $match: { _id: "2" } },
    { $unwind: "$events" },
    { $match: { "events._id": "456" } },
    { $replaceRoot: { newRoot: "$events" } } 
])

Выходы:

{ "_id" : "456", "name" : "eventName_1" }
...