38

複数の支払い元を使用するアカウントを識別する集計を作成しようとしています。典型的なデータになります。

{
 account:"abc",
 vendor:"amazon",
}
 ...
{
 account:"abc",
 vendor:"overstock",
}

さて、これに似たアカウントのリストを作成したいと思います

{
 account:"abc",
 vendorCount:2
}

Mongo の集計フレームワークでこれをどのように記述しますか

4

8 に答える 8

72

$addToSet および $unwind 演算子を使用して、これを理解しました。

Mongodb 集計カウント配列/セット サイズ

db.collection.aggregate([
{
    $group: { _id: { account: '$account' }, vendors: { $addToSet: '$vendor'} }
},
{
    $unwind:"$vendors"
},
{
    $group: { _id: "$_id", vendorCount: { $sum:1} }
}
]);

それが誰かを助けることを願っています

于 2013-08-29T03:26:48.643 に答える
25

次のようなクエリを実行すると、巻き戻しが回避される方が良いと思います

db.t2.insert({_id:1,account:"abc",vendor:"amazon"});
db.t2.insert({_id:2,account:"abc",vendor:"overstock"});


db.t2.aggregate(
{ $group : { _id : { "account" : "$account", "vendor" : "$vendor" }, number : { $sum : 1 } } },
{ $group : { _id : "$_id.account", number : { $sum : 1 } } }
);

期待される次の結果が表示されます。

{ "_id" : "abc", "number" : 2 }
于 2015-01-16T08:17:18.287 に答える
16

使用できますsets

db.test.aggregate([
    {$group: { 
      _id: "$account", 
      uniqueVendors: {$addToSet: "$vendor"}
    }},
    {$project: {
      _id: 1, 
      vendorsCount: {$size: "$uniqueVendors"}
    }}
]);
于 2018-03-10T14:45:03.073 に答える
-5

db.collection.distinct("example.item").forEach( function(docs) {
    print(docs + "==>>" + db.collection.count({"example.item":docs}))
});
于 2016-07-05T21:16:00.257 に答える