我在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"
]
}
]
}我想要做的是返回没有嵌套数组结构的数据,在" data“中有"data”。我想要这个输出:
{
"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" : [
]
}发布于 2018-10-04 23:04:12
您可以在管道中使用阶段,从聚合的前一阶段中挑选所需的内容
db.staffmembers.aggregate([
{
$group:{
_id:null,
data:{$addToSet:"$department"}
}
},
{
$project:{
data:1,
_id:0
}
}
])发布于 2018-10-05 05:30:05
这就是你想要的:
db.collection.aggregate({
$project: {
data: { $arrayElemAt: [ "$data.data", 0 ] },
_id: 0
}
})请注意,我有一种感觉,你的管道和/或数据设置有一些新奇的东西。如果您可以共享输入数据和整个管道,这可能是有益的。
https://stackoverflow.com/questions/52648539
复制相似问题