如何获得一个表达式
假设以下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
}
这可能与该汇聚框架? 如果现在,我将如何构建我的数据库,然后支持我的请求?
亲切的问候
我不知道为什么你的类别字段,但我把这个名称字段。
查询:
db.coll.aggregate([
{ $match : {"articles.name" : {$regex : ".*art.*"}, "name":"cat 2"} },
{ $unwind:'$articles'},
{ $group: {
_id : {
name: "$articles.name",
category:"$name"
},
count : { $sum : 1 }
}}
])
这不是我所要求的,这会给我所有包含艺术品和名字的文件都是猫1,因此我只会找到猫2,我也需要找到猫1,因为猫1是猫2的父母,而我那么需要总数的计数。 – Complexity
我在上面的帖子中更改了我的查询。这个好吗? –
不完全,我很抱歉,你在文章名称上分组似乎没问题,但在回复中我也需要分类。因此,我需要让类别1包含x项目,类别2包含x项目...现在,我只是检索找到具有给定名称的文章多少次,而不是每个类别找到多少文章。 – Complexity
的平均类别是什么 “1类”? –
它用于分层数据存储。 – Complexity