У меня есть функция в моем бэкэнде MongoDB / Node, которая возвращает список отделов.
Документы в коллекции выглядят так:
[
{
_id: 111,
department: "abc"
},
{
_id: 222,
department: "def"
},
{
_id: 333,
department: "ghi"
}
]
Это работает с агрегированными взглядамикак это:
$group: {
_id: null,
data: { $addToSet: "$department" }
}
Однако то, что это производит, не идеально.Выходные данные выглядят так:
{
"count": 1,
"data": [
{
"_id": null,
"data": [
"abc",
"def",
"ghi"
]
}
]
}
Что я хотел бы сделать, это вернуть данные, где нет структуры вложенного массива с «данными» внутри «данных».Мне бы хотелось, чтобы этот вывод:
{
"count": 1,
"data": [
"abc",
"def",
"ghi",
]
}
Есть ли способ, которым я могу сделать это на этапе проецирования?
Я пробовал это:
{
$group: {
_id: null,
data: { $addToSet: "$department" }
}
},
{
$project: {
data: 0,
_id: 0
}
}
Но конецс той же структурой данных.Есть ли способ, которым я могу сделать это с $project
?
ОБНОВЛЕНИЕ:
После предложения я попробовал это:
db.staffmembers.aggregate([
{
$group: {
_id: null,
data: { $addToSet: "$department" }
}
},
{
$project: {
data: {
$reduce: {
input: "$data.data",
initialValue: [],
in: {
$concatArrays: ["$$this", "$$value"]
}
}
}
}
}
]);
... но это выводитпустой массив для data
:
{
"_id" : null,
"data" : [
]
}