首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB聚合:计算不同字段的数量

MongoDB聚合:计算不同字段的数量
EN

Stack Overflow用户
提问于 2013-08-29 09:47:45
回答 7查看 59K关注 0票数 38

我正在尝试编写一个聚合,以确定使用多个支付来源的帐户。典型的数据应该是。

代码语言:javascript
复制
{
 account:"abc",
 vendor:"amazon",
}
 ...
{
 account:"abc",
 vendor:"overstock",
}

现在,我想生成一个类似于以下内容的帐户列表

代码语言:javascript
复制
{
 account:"abc",
 vendorCount:2
}

我该如何在Mongo的聚合框架中编写这些代码呢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-08-29 11:26:49

我通过使用$addToSet和$unwind运算符解决了这个问题。

Mongodb Aggregation count array/set size

代码语言:javascript
复制
db.collection.aggregate([
{
    $group: { _id: { account: '$account' }, vendors: { $addToSet: '$vendor'} }
},
{
    $unwind:"$vendors"
},
{
    $group: { _id: "$_id", vendorCount: { $sum:1} }
}
]);

希望这能帮助到某个人

票数 72
EN

Stack Overflow用户

发布于 2015-01-16 16:17:18

我认为如果像下面这样执行查询会更好,这样可以避免展开

代码语言:javascript
复制
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 } } }
);

它将向您显示以下预期结果。

代码语言:javascript
复制
{ "_id" : "abc", "number" : 2 }
票数 25
EN

Stack Overflow用户

发布于 2018-03-10 22:45:03

您可以使用sets

代码语言:javascript
复制
db.test.aggregate([
    {$group: { 
      _id: "$account", 
      uniqueVendors: {$addToSet: "$vendor"}
    }},
    {$project: {
      _id: 1, 
      vendorsCount: {$size: "$uniqueVendors"}
    }}
]);
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18501064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档