2016-06-15 3 views
2

私は文字列の配列としてcategoryフィールドにある文書を持って、その結果で移入数

{ name: "aaa", categories: ["apple","banana","peach"] }, 
{ name: "bbb", categories: ["apple","orange" }, 
{ name: "ccc", categories: ["apple","peach"] } 
... 

のように私が持っているとの集計値を持つオブジェクトの配列する必要がありますこのカテゴリのoccurancesのカテゴリと数から一意の各値は、次のように:

[ 
    { category: "apple", qty: 3 }, 
    { category: "banana", qty: 1 }, 
    { category: "peach", qty: 2 }, 
    { category: "orange", qty: 1 } 
] 

私は次のことを試してみましたが、それは結果に

を空の配列を生成します

どこが間違っていますか?あなたの最初のパイプラインステップは$groupは、あなたがそのperculiarにアレイに追加すると同時に、本質的categories配列によってあなたのコレクション内のすべての文書をグループ化された操作を、パイプであるので、それは空の結果を返している

答えて

1

アレイタイプをグループ化します。あなたは存在しない配列フィールドに上$unwindオペレータを適用すると、空の結果は次の(前$groupオペレータのパイプラインは、新しいcategoriesフィールド、キーのみ_idnameを生産していないため)。

あなたはそれが$unwindが適用されているカテゴリデータフィールドのそれぞれとすべての要素のための新しいレコードを生成するように、最初にすべてのcategories配列を平らにしたいと思います。

SomeCollection.native(function(err, collection) { 
    collection.aggregate([ 
     { $unwind: "$categories" }, 
     { $group: { _id: "$categories", qty: { $sum : 1 } } } 
    ], function(error, result) { 
     sails.log.info('result:', result); 
    }); 
}); 
次のアプローチを考えてみましょう

:今、あなたは、所望の結果を得るために$group操作を適用することができます