Как преобразовать документы в ключ-значение? - PullRequest
0 голосов
/ 17 мая 2018

Ну, у меня есть документы с этим strcuture:

{
    "x" : "X1",
    "y" : 10
},
{
    "x" : "X2",
    "y" : 22
},
{
    "x" : "...",
    "y" : 42
}

Итак, как мне преобразовать все результаты в:

{
    "X1" : 10,
    "X2" : 22,
    "X3" : 42
}

Я пытаюсь с $arrayToObject и $map, но это не работает

Спасибо!

Эта коллекция насчитывает около 50 миллионов документов.

1 Ответ

0 голосов
/ 17 мая 2018

Предполагая, что ваша коллекция достаточно мала, чтобы вывод следующей операции не превышал 16 МБ BSON limit , вы можете использовать агрегацию ниже:

db.col.aggregate([
    {
        $group: {
            _id: null,
            docs: {
                $push: {
                    k: "$x",
                    v: "$y"
                }
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $arrayToObject: "$docs"
            }
        }
    }
])

$ arrayToObject ожидает объекты, имеющие два свойства k и v.Для перевода этого объекта на корневой уровень вы можете использовать оператор $ replaceRoot .

...