如何在查询结果中获取键的最常见的不同值.
考虑一个集合'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客户端中查询?
在发布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}
你可以用框架做更多的事情.请参阅有关运营商的文档