mongodb 怎么 对类型为list的字段的值进行汇总统计

发布于 2022-09-05 05:34:00 字数 477 浏览 21 评论 0

mongodb中有一个字段为list类型
如下,tags
想要对tags内的'a、b、c、d'其进行计数统计

{'_id':ObjectId('594e473dd746002ad0464b36'),'tags':['a','b','d']}
{'_id':ObjectId('59637962d7460028c05590ef'),'tags':['a','c','d']}
{'_id':ObjectId('59637962d7460028c0558ff6'),'tags':['c','d']}

统计tags内的'a','b','c','d'每个都出现了几次。
期待的结果

[{'name':'a','count':2},
{'name':'b','count':1},
{'name':'c','count':2},
{'name':'d','count':3}]

该怎么写这个查询语句呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

半仙 2022-09-12 05:34:00

数据源

db.getCollection('test').insert([
{
    'tags':['a','b','d']
},
{
    'tags':['a','d']
},
{
    'tags':['b','d']
}
])

SQL

db.getCollection('test').aggregate([
{
    $unwind: '$tags'
},{
    $group: {
        _id: '$tags',
        count: {$sum: 1}
    }
}
])

结果

/* 1 */
{
    "_id" : "d",
    "count" : 3.0
}

/* 2 */
{
    "_id" : "b",
    "count" : 2.0
}

/* 3 */
{
    "_id" : "a",
    "count" : 2.0
}

如果你要将查询结果的_id字段名改为name,那么就要再加个$project

db.getCollection('test').aggregate([
{
    $unwind: '$tags'
},{
    $group: {
        _id: '$tags',
        count: {$sum: 1}
    }
},{
    $project: {
        _id:0,
        name: '$_id',
        count: '$count'
    }
}
])
没有伤那来痛 2022-09-12 05:34:00
db.collection.aggregate([
    {$unwind: "$tags"},
    {$group: {_id: "$tags", count: {$sum: 1}}},
    {$project: {name: "$_id", count: "$count", _id: 0}}
]);

$unwind, $group, $project都是很常用的运算符,先查下文档看咯,不懂再说。

亚希 2022-09-12 05:34:00

感觉写个脚本遍历比较方便,单靠写查询应该很难。

沉默的熊 2022-09-12 05:34:00

改正下 @张淞 大哥的答案,$group 阶段的count:1 应改为
count:{ $sum:1}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文