Использование MongoDB Aggregation для объединения двух списков в объект - PullRequest
1 голос
/ 17 июня 2020

Я использую mongoDB, и у меня есть документы, похожие на следующий

{
  "files": ["Customers", "Items", "Contacts"],
  "counts": [1354, 892, 1542],
  ...
}

И, используя этап конвейера агрегации, я хочу преобразовать приведенное выше во что-то вроде ..

{
  "file_info": [
    {"file_name": "Customers", "record_counts": 1354},
    {"file_name": "Items", "record_counts": 892},
    {"file_name": "Contacts", "record_counts": 1542}
  ]
}

Я пробовал использовать $map, $reduce, and $arrayToObject, но безуспешно. Какие операторы я могу использовать, чтобы добраться от того места, где я сейчас нахожусь, туда, где мне нужно быть?

1 Ответ

1 голос
/ 17 июня 2020

Вы можете использовать $ zip , чтобы объединить два массива и $ map , чтобы получить новую структуру:

{
    $project: {
        file_info: {
            $map: {
                input: { $zip: { inputs: [ "$files", "$counts" ] } },
                in: {
                    file_name: { $arrayElemAt: [ "$$this", 0 ] },
                    record_counts: { $arrayElemAt: [ "$$this", 1 ] },
                }
            }
        }
    }
}

Mon go Playground

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