如何获得一个表达式

问题描述:

假设以下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" 
    } 
    ] 
} 

现在,我想查询数据库,查找其中名称中包含“艺术”产品类别是“猫1”。

我想有适合每个类别下的产品数量,同时保持层次,这是否意味着我想收到这样的事情:

{ 
    "name": "cat 1", 
    "count": 2 
} 

这可能与该汇聚框架? 如果现在,我将如何构建我的数据库,然后支持我的请求?

亲切的问候

+0

的平均类别是什么 “1类”? –

+0

它用于分层数据存储。 – Complexity

我不知道为什么你的类别字段,但我把这个名称字段。

查询:

db.coll.aggregate([ 
    { $match : {"articles.name" : {$regex : ".*art.*"}, "name":"cat 2"} },    
    { $unwind:'$articles'}, 
    { $group: { 
     _id : { 
      name: "$articles.name", 
      category:"$name" 
     }, 
     count : { $sum : 1 } 
    }} 
]) 
+0

这不是我所要求的,这会给我所有包含艺术品和名字的文件都是猫1,因此我只会找到猫2,我也需要找到猫1,因为猫1是猫2的父母,而我那么需要总数的计数。 – Complexity

+0

我在上面的帖子中更改了我的查询。这个好吗? –

+0

不完全,我很抱歉,你在文章名称上分组似乎没问题,但在回复中我也需要分类。因此,我需要让类别1包含x项目,类别2包含x项目...现在,我只是检索找到具有给定名称的文章多少次,而不是每个类别找到多少文章。 – Complexity