2015-10-20 60 views
0

假設以下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

回答

1

我不知道爲什麼你的類別字段,但我把這個名稱字段。

查詢:

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

相關問題