Я новичок в MongoDB и испытываю трудности с настройкой конкретного запроса для нового проекта, над которым я работаю.Как найти объект, вложенный в массивы в MongoDB?
У меня есть структура данных, которая выглядит следующим образом (упрощенный вариант):
games: {_id: ..., scenes: [{_id: ..., views: [{_id: ...}]}]}
(т.е. игры содержит набор сцен, сцен содержит коллекцию взглядов).
Я хочу запросить здесь конкретный объект вида. Я полагаю, что ответ включает использование $ elemMatch, но как мне это настроить? После того, как несколько исследований + игры вокруг, я знаю, что могу сделать это, чтобы получить сцену:
db.collection("games").findOne({
_id: ObjectId(req.params.gid)},
{
scenes: {
$elemMatch: {_id: ObjectId(req.params.sid)}
}
}...
Но как я расширяю это так, что она тянет только конкретный вид я заинтересован в (по _id) ?
Я думаю, что всегда мог найти объект вида, который я ищу, используя цикл for, который вызывает другой вопрос. Эффективность Wrt, лучше делать запросы, подобные этому, используя Mongo или вручную, вытаскивая весь документ в цикл через коллекции?
Вы не можете получить только объект внутри массива. Вы должны вытащить весь документ. Если вы хотите, чтобы субдокументы сами по себе, вам нужно использовать структуру агрегации. – cdbajorin
@cdbajorin Когда вы говорите «самостоятельно», вы имеете в виду, что невозможно отфильтровать представления с значениями _id, которые я не хочу? Или вы имеете в виду, что запрос, который я ищу, дал бы мне структуру, похожую на 'result.scenes [0] .views [0]'? Я в порядке с последним. – JSideris