Извлечение поля из объекта без $ проекта дважды MongoDB - PullRequest
0 голосов
/ 04 июля 2018

Ну, может быть, это простой вопрос, но я не нашел удовлетворенного ответа в документации mongoDB об инфраструктуре агрегирования.

Если я выполняю поиск, который приводит к массиву совпадающих документов, как проецировать только поле последнего элемента?

db.collection.aggregate([
    {
        $lookup: {
            .... some lookup pipeline ....,
            as: "matchedObjects"
        }
    },
    {
        // Here I get the last Object
        $project: {
            doc:  { $arrayElemAt: [ { $slice: ["$matchedObjects", -1 ] }, 0 ]}
        }
    },
    {      
        // extract what I want
        $project: {
            field:  "$doc.field"
        }
    }
])

Ну, как мне сделать это только с первым $ project

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать $ let , чтобы захватить последний элемент во временной переменной, а затем сослаться на эту переменную, чтобы получить field:

db.collection.aggregate([
    {
        $project: {
            field: {
                $let: {
                    vars: { doc:  { $arrayElemAt: [ { $slice: ["$matchedObjects", -1 ] }, 0 ]} },
                    in: "$$doc.field"
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...