我正在尝试编写一个聚合,以识别使用多个付款来源的账户。典型的数据如下。
{
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的聚合框架来编写这个查询
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 }
您可以使用集合
db.test.aggregate([
{$group: {
_id: "$account",
uniqueVendors: {$addToSet: "$vendor"}
}},
{$project: {
_id: 1,
vendorsCount: {$size: "$uniqueVendors"}
}}
]);
我不明白为什么有人需要两次使用$group
。
db.collection.aggregate([ { $group: { "_id": "$account", "number": { $sum: 1 } } } ])
这种方法不使用$unwind和其他额外操作。此外,如果在聚合中添加了新内容,这不会影响任何内容。接受的答案存在缺陷。如果在$group中有其他累积字段,则会在接受的答案的$unwind阶段引起问题。
db.collection.aggregate([{
"$group": {
"_id": "$account",
"vendors": {"$addToSet": "$vendor"}
}
},
{
"$addFields": {
"vendorCount": {
"$size": "$vendors"
}
}
}])
为了识别使用多个付款来源的账户:
db.payment_collection.aggregate([ { $group: {"_id":"$account" ,
"number":{$sum:1}} }, {
"$match": {
"number": { "$gt": 1 }
}
} ])
这将完美地运行,
db.UserModule.aggregate(
{ $group : { _id : { "companyauthemail" : "$companyauthemail", "email" : "$email" }, number : { $sum : 1 } } },
{ $group : { _id : "$_id.companyauthemail", number : { $sum : 1 } } }
);
一个例子
db.collection.distinct("example.item").forEach( function(docs) {
print(docs + "==>>" + db.collection.count({"example.item":docs}))
});
results.get("vendors").size();
计算出供应商数量,是否真的有必要再次迭代$vendors
呢? - Jerry Chin$size
运算符。原文链接:https://dev59.com/qGMl5IYBdhLWcg3wTlnY#49210341 - Hett