mongodb результаты с массивом на индивидуальную карту результатов - PullRequest
0 голосов
/ 10 января 2019

У меня есть сводный запрос, который выполняет именно то, что я хочу до этого момента, но я застрял в преобразовании данных на последнем шаге. У меня есть следующее:

{
    "name": "a",
    "tasks": [ { .. }, { .. }]
},
{
    "name": "b",
    "tasks": [ { .. }, { .. }]
}

Все, что мне нужно сделать, это сопоставить каждую запись в tasks с отдельным результатом. Звучит невероятно просто для меня.

Ожидаемый результат должен быть

{ "name": "a", "task": { .. } },
{ "name": "a", "task": { .. } },
{ "name": "b", "task": { .. } },
{ "name": "b", "task": { .. } }

Я пытался использовать { $unwind: '$tasks' } в надежде, что смогу получить отдельные записи, но это только расширяет первый результат. Я получаю задания только от a.

Я также пытался $map, но у меня были похожие проблемы.

Если необходимо, внутри каждого task есть _id, который можно использовать для уникальности. Это действительно то, что я пытаюсь сделать, карта пар ключ-значение, таких как

{ "_id": "idFromTheTask", "name": "a" }

1 Ответ

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

$ unwind - правильный путь, если ваш массив tasks не пуст. В этом случае он удалит такой документ. Чтобы предотвратить это, вы можете использовать preserveNullAndEmptyArrays, попробуйте:

db.collection.aggregate([
    {
        $unwind: {
            path: "$tasks",
            preserveNullAndEmptyArrays: true
        }
    }
])

Пример здесь

...