2016-11-21 33 views
1

假設我們有以下數據如何通過貓鼬中的子文檔字段對記錄進行分組?

*母公司*

{ _id: 10, child: ObjectID(20) } 
{ _id: 11, child: ObjectID(21) } 
{ _id: 12, child: ObjectID(23) } 

*兒童*

{ _id: 20, name: 'test-1' } 
{ _id: 21, name: 'test-2' } 
{ _id: 22, name: 'test-3' } 
{ _id: 23, name: 'test-1' } 

我想知道有什麼用貓鼬得到下面的結果。

{ _id: 'test-1', count: 2} 
{ _id: 'test-2', count: 1} 

我目前使用下面的查詢,但結果_id總是{ _id: null, count: 3 } :(

Parent.aggregate([{ 
    $group: { 
    _id: '$child.name', 
    count: { $sum: 1 } 
    } 
}]) 

任何形式的幫助表示讚賞。

+0

這是兩個不同的集合? – Yogesh

+0

是的,他們是不同的集合@Yogesh – emil

+0

在這種情況下,你應該首先寫兩個不同的查詢在父集合上獲取所有子id,並在集合'$ match'中使用'$ in'在子集合中使用該子id,並通過名稱'最後'總結' – Yogesh

回答

1

這是更好的方式來創建一個避免兩個不同集合上的兩個查詢的單個集合。

首先,您應該從paren中找出所有不同的子id牛逼集合和分配給它的變量如下:

var allChildIds = db.parent.distinct("child") 

之後用於children收集如下那個孩子IDS:

db.children.aggregate({"$match":{"_id":{"$in":allChildIds}}},{"$group":{"_id":"$name","sum":{"$sum":1}}})