2016-11-21 2 views
1

と仮定すると、我々は次のようしているデータ mongooseの子ドキュメントフィールドでレコードをグループ化するにはどうすればいいですか?

*親*

{ _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

:それは以下のようにchildrenコレクションでその子のIDを使用した後

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

? – Yogesh

+0

はい彼らは異なったコレクションです@Yogesh – emil

+0

この場合、最初に親コレクションに2つの異なるクエリを書く必要があります。すべての子IDを取得し、 '$ match'を使用して' $ match'を子コレクションに使用し、 '$ match'を集計し、' name 'そして最後に' sum' – Yogesh

答えて

1

それが1つを作成するためのより良い方法です2つの異なるコレクションで2つのクエリを避けるための単一のコレクション

まず、parenからすべての異なる子IDを見つける必要がありますトンコレクションと以下のように変数それに割り当てます。これらの2つの異なるコレクションである

db.children.aggregate({"$match":{"_id":{"$in":allChildIds}}},{"$group":{"_id":"$name","sum":{"$sum":1}}}) 
関連する問題