我正在尝试编写一个聚合,以确定使用多个支付来源的帐户。典型的数据应该是。
{
account:"abc",
vendor:"amazon",
}
...
{
account:"abc",
vendor:"overstock",
}现在,我想生成一个类似于以下内容的帐户列表
{
account:"abc",
vendorCount:2
}我该如何在Mongo的聚合框架中编写这些代码呢
发布于 2013-08-29 11:26:49
我通过使用$addToSet和$unwind运算符解决了这个问题。
Mongodb Aggregation count array/set size
db.collection.aggregate([
{
$group: { _id: { account: '$account' }, vendors: { $addToSet: '$vendor'} }
},
{
$unwind:"$vendors"
},
{
$group: { _id: "$_id", vendorCount: { $sum:1} }
}
]);希望这能帮助到某个人
发布于 2015-01-16 16:17:18
我认为如果像下面这样执行查询会更好,这样可以避免展开
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 }发布于 2018-03-10 22:45:03
您可以使用sets
db.test.aggregate([
{$group: {
_id: "$account",
uniqueVendors: {$addToSet: "$vendor"}
}},
{$project: {
_id: 1,
vendorsCount: {$size: "$uniqueVendors"}
}}
]);https://stackoverflow.com/questions/18501064
复制相似问题