2016-09-15 18 views
0

mongodbでループバックjsを使用しています。各タグの製品数を取得する方法

{ 
    tag1 : 1, 
    tag2 : 2, 
    tag3 : 2 
} 

は、私はこのようなを達成しようとした:私は、タグごとにグループ化された製品の数を見つけること 期待される結果のようなものを必要とし

{ 
    name:'prod 1', 
    tags:['tag1','tag3'] 
}, 
{ 
    name:'prod 2', 
    tags:['tag2'] 
}, 
{ 
    name:'prod 3', 
    tags:['tag2','tag3'] 
} 

: は、私のような製品のコレクションを持っています

productCollection.aggregate(
         {$match: { 
          is_available: true 
         } }, 
         {$unwind:"$tags"}, 
         { $group : { 
          _id:"$tags", 
          "products" : { "$sum" : 1 } 
          } 
         },function(err,totals){}); 

しかし、上記は個々のタグではなく、tagsのプロパティ全体に基づいてグループ化されています。私は何が欠けていますか?私は何とかそれをやわらげて投影する必要がありますか?

+0

現在のo/pはなんですか? – notionquest

+0

あなたのクエリは、すでに予想される結果を生成しています。私はあなたがなぜそれが期待される結果を生んでいないと言っているのか理解できませんでした。下の答えでもクエリは変更されていません。 – notionquest

+0

[mongoのあるすべてのドキュメントで配列の出現をカウントする]の可能な複製(http://stackoverflow.com/questions/34089056/count-array-occurrences-across-all-documents-with-mongo) – styvane

答えて

0

あなたが望む結果を得るには、いくつかの方法があります。しかし、正確な文書形式が必要な場合は、mongo shellを試してみてください。

var obj = {}; 

db.collection.aggregate([ 
    {$unwind:"$tags"}, 
    {$group:{_id:"$tags", count:{$sum:1}}} 
]).forEach(function(doc){ 
    obj[doc._id] = doc.count; 
}); 

printjson(obj); 

これは放出されるはずです。

{ 
    "tag1" : NumberInt(1), 
    "tag3" : NumberInt(2), 
    "tag2" : NumberInt(2) 
} 

うまくいけば、いくつかの指示があります。

関連する問題