我在下面定义的层次结构中有一个嵌套的json对象
[
{
"categoryId": 1,
"categoryName": "Category 1",
"childCategory": null,
"active": false
},
{
"categoryId": 2,
"categoryName": "Category 2",
"active": true,
"childCategory": [
{
"categoryId": 4,
"categoryName": "Category 4",
"childCategory": null,
"active": false
},
{
"categoryId": 5,
"categoryName": "Category 5",
"childCategory": null,
"active": true
}
]
},
{
"categoryId": 10,
"categoryName": "Category 10",
"childCategory": null,
"active": true
}
]
由此我想要将所有活动类别选择为单个数组结构。我的输出应该是
[
{
"categoryId": 2,
"categoryName": "Category 2",
"active": true
},
{
"categoryId": 5,
"categoryName": "Category 5",
"active": true
},
{
"categoryId": 10,
"categoryName": "Category 10",
"active": true
}
]
是否可以在单个查询语句中直接获取此数据。我正在使用mongodb的spring数据。
答案 0 :(得分:1)
您可以尝试以下聚合。
$redact
一次浏览一个文档级别,并根据匹配条件执行$$DESCEND
和$$PRUNE
。
$unwind
$childCategory
与preserveNullAndEmptyArrays
一起使数组保持null
值。
db.collection.aggregate({
$redact: {
$cond: [{
$eq: ["$active", true]
}, "$$DESCEND", "$$PRUNE"]
}
}, {
$unwind: {
path: "$childCategory",
preserveNullAndEmptyArrays: true
}
})