在MongoDB中按属性值(和计数?)进行分组

时间:2014-08-18 20:32:32

标签: meteor aggregation-framework

我使用Meteor进行网络项目,我需要找到一种方法,通过其中一个属性对集合中的记录进行分组(和计数)。这是来自Collection的示例记录,我要从中执行此操作:

{
    "owner" : "7YnNwSC3E3iTcRHcC",
    "isbn" : "1551110881",
    "title" : "Introduction",
    "type" : "0",
    "class" : "ADNR1234",
    "condition" : "0",
    "active" : false,
    "createdAt" : ISODate("2014-08-18T15:38:30.012Z"),
    "tradeFor" : {
        "isbn" : "7463849506",
        "title" : "Intro 2"
    },
    "_id" : "RFzvEdLkYxt5EmQ7s"
}

我知道我需要找到一种方法...我想它被称为聚合?无论如何......我需要使用的属性是" class"。我需要一种方法来浏览整个集合,让我输出每个类(ADNR1234),其中每个类都使用类作为值。

我希望我没有把这个问题写得不好,我对Meteor来说有点新鲜,这似乎是一个试图解决的奇怪问题。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

Meteor使用MongoInternals从节点驱动程序公开mongo连接,因此您可以使用它来调用聚合。

var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;
var col = db.collection( 'yourCollection' );
var aggregateSync = Meteor._wrapAsync( col.aggregate.bind( col ) );
var pipeline = [{$match: {}},{$group: {_id: '$class', count:{$sum: 1}}} ];
var theAnswer = aggregateSync( pipeline );

aggregation pipeline上的文档还允许您在需要时应用排序和限制等内容。


已更新:使用$match选择文档更正了管道数组。工作代码为 Meteor Pad