Агрегирование Mongodb - у меня есть данные, теперь, как отобразить их для правильного вывода? - PullRequest
1 голос
/ 19 июня 2019

У меня есть две коллекции: обзор и игра.Я пытаюсь сделать запрос на "Игры, рассмотренные сегодня" в Mongodb.Пока у меня все работает довольно хорошо.Единственная проблема - окончательное форматирование.

db.Review.aggregate([
        {
            $match: {
                publishedDate: {
                    $gte: cutoff
                }
            }
        }, {
            $sortByCount: '$game.id'
        }, {
            $limit: 10
        }, {
            $lookup: {
                from: 'Game',
                localField: '_id',
                foreignField: 'id',
                as: 'game'
            }
        }, {
            $project: {
                'game.id': 1,
                'game.name': 1,
                'game.topCriticScore': 1,
                'game.firstReleaseDate': 1,
                'game.tier': 1,
                '_id': 0
            }
        }
    ]);

Возвращает результат в следующем формате:

[
    {
        "game": [
            {
                //document
            }
        ]
    },
    {
        "game": [
            {
                //document
            }
        ]
    },
    {
        "game": [
            {
                //document
            }
        ]
    }
]

В целом, это здорово!У меня есть все данные, которые мне нужны.Тем не менее, он не отформатирован так, как мне хотелось бы.

Я знаю, что если бы я использовал Javascript, я бы просто сделал эту последнюю строку кода:

results.map(result => result.game[0])

IsЕсть ли способ достичь этого отображения?

1 Ответ

1 голос
/ 19 июня 2019

Вы можете использовать $ arrayElemAt , чтобы получить первый элемент, и $ replaceRoot , чтобы повысить его до корневого уровня:

db.collection.aggregate([
    {
        $replaceRoot: {
            newRoot: { $arrayElemAt: [ "$game", 0 ] }
        }
    }
])

Mongo Playground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...