我的文件存储方式如下:
{
_id: 1001,
name: "pointa"
data: [
{
dataid: 123,
parentid: 44,
count: 12
},
{
dataid: 234,
parentid: 45,
count: 5
}
],
subPoints: {
pointa_a: {
name: "pointa_a",
data: [
{
dataid: 123,
parentid: 44,
count: 4
},
{
dataid: 234,
parentid: 45,
count: 5
}
]
},
pointa_b: {
name: "pointa_b",
data: [
{
dataid: 123,
parentid: 44,
count: 8
},
]
},
}
},
// 'pointb' has no subpoints
{
_id: 1001,
name: "pointb"
data: [
{
dataid: 123,
parentid: 44,
count: 3
},
{
dataid: 234,
parentid: 45,
count: 25
}
]
}
我希望能够获得"数据"按dataid
或parentid
分组。我的查询可能类似于所有的pointa_b和所有的pointb,因此它可以是根或者,它可以是嵌套文档的组合。我尝试使用展开来将子点的所有数据调到根级别,但是如果文档没有该特定的子点,则它不会显示在结果中
例如,如果我这样做:
db.test1.aggregate([
{$unwind : "$data"},
{$unwind : "$subPoints.pointa_b.data"}
]);
然后是" pointb"的数据不见了。如果我可以在根级别拥有所有这些数据,那么我知道我可以使用$cond
来执行$project
来提取我需要的数据。或者即使我没有具有subPoints的文档的根级数据,我也可以总结subPoints中的数据,因为它会累加到父级,但我不知道如何压平它像这样。
有没有办法取消嵌套具有相同父结构的子文档?