複数の支払い元を使用するアカウントを識別する集計を作成しようとしています。典型的なデータになります。
{
account:"abc",
vendor:"amazon",
}
...
{
account:"abc",
vendor:"overstock",
}
さて、これに似たアカウントのリストを作成したいと思います
{
account:"abc",
vendorCount:2
}
Mongo の集計フレームワークでこれをどのように記述しますか
複数の支払い元を使用するアカウントを識別する集計を作成しようとしています。典型的なデータになります。
{
account:"abc",
vendor:"amazon",
}
...
{
account:"abc",
vendor:"overstock",
}
さて、これに似たアカウントのリストを作成したいと思います
{
account:"abc",
vendorCount:2
}
Mongo の集計フレームワークでこれをどのように記述しますか
$addToSet および $unwind 演算子を使用して、これを理解しました。
db.collection.aggregate([
{
$group: { _id: { account: '$account' }, vendors: { $addToSet: '$vendor'} }
},
{
$unwind:"$vendors"
},
{
$group: { _id: "$_id", vendorCount: { $sum:1} }
}
]);
それが誰かを助けることを願っています
次のようなクエリを実行すると、巻き戻しが回避される方が良いと思います
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 }
使用できますsets
db.test.aggregate([
{$group: {
_id: "$account",
uniqueVendors: {$addToSet: "$vendor"}
}},
{$project: {
_id: 1,
vendorsCount: {$size: "$uniqueVendors"}
}}
]);
例
db.collection.distinct("example.item").forEach( function(docs) {
print(docs + "==>>" + db.collection.count({"example.item":docs}))
});