假设以下MongoDB文档:
{
"name": "cat 1",
"desc": "cat 1 desc",
articles: []
},
{
"name": "cat 2",
"desc": "cat 2 desc",
"parent": "cat 1",
articles: [
{
"name": "art 1"
},
{
"name": "art 2"
}
]
}
现在,我想查询数据库,找到名称包含" art"和类别是" cat 1"。
我希望每个类别下的产品数量都合适,同时保持层次结构,这意味着我希望收到这样的内容:
{
"name": "cat 1",
"count": 2
}
聚合框架可以实现吗? 如果现在,我如何构建我的数据库然后支持我的请求?
亲切的问候
答案 0 :(得分:1)
我不确定为什么你的类别字段,但我认为这是名称字段。
查询:
db.coll.aggregate([
{ $match : {"articles.name" : {$regex : ".*art.*"}, "name":"cat 2"} },
{ $unwind:'$articles'},
{ $group: {
_id : {
name: "$articles.name",
category:"$name"
},
count : { $sum : 1 }
}}
])