最常见的不同价值观mongodb

 无声无无为爱 发布于 2023-01-18 10:09

如何在查询结果中获取键的最常见的不同值.

考虑一个集合'collectionSample'

{
    name : 'a',
    value: 10,
    word : 'baz'
},
{
    name : 'a',
    value: 65,
    word : 'bar'
},
{
    name : 'a',
    value: 3,
    word : 'foo'
},
{
    name : 'b',
    value: 110,
    word : 'bar'
},
{
    name : 'b',
    value: 256,
    word : 'baz'
}

在这里,我想找到关键'名称'的模式,这是最重复的不同'名称'.

我希望得到的结果就像

 {'most_common_distinct_val':a}  //since a is count 3 and b is count 2

如何在NodeJs mongo客户端中查询?

1 个回答
  • 2017-08-01更新

    在发布MongoDB 3.4时,可以使用$ sortByCount简化以下代码,它基本上等于$group+ $sort.代码段:

    col.aggregate([{
        "$sortByCount": "$name"
    }], ...);
    

    mongodb 聚合框架可以完成这项工作.代码示例:

    var MongoClient = require("mongodb").MongoClient;
    MongoClient.connect("mongodb://localhost/YourDB", function(err, db) {
        var col = db.collection("YourCol");
        col.aggregate([{
            "$group": {_id: "$name", count: { "$sum": 1}}
        }, {
            "$sort": {count: -1}
        }], function(err, docs) {
            var keys = []
            docs.forEach(function(doc) {
                console.log(JSON.stringify(doc)); // do what you want here.
            });
        });
    });
    

    聚合框架使用不同的"过滤器"来过滤掉结果集.正如您在示例中看到的,有一个包含所有这些过滤器的数组.
    这里我有2个过滤器,第一个:

    {"$group": {_id: "$name", count: { "$sum": 1}}}
    

    是按名称对数据进行分组并计算重复次数.
    第二个:

    {"$sort": {count: -1}}
    

    是按重复次数(计数)对结果进行排序.
    如果你只想要最多重复一条记录,你可以在那里添加一个过滤器:

    {"$limit": 1}
    

    你可以用框架做更多的事情.请参阅有关运营商的文档

    2023-01-18 10:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有