在node.js-mongodb中分组

我想在我的server.js中使用group,但是我得到这个错误:

TypeError:Object #(Collection) has no method 'group' 

我在网上看,看到这个函数的名字。

这是我写的:

 var monk = require('monk'); var db = monk('localhost:27017/Messages'); var collection = db.get('col'); collection.group(['a'], {}, {}, {}, function (e, docs) { res.json(docs); }); 

谁能告诉我什么是错的? 谢谢!

Monk本身并没有实现一个.group()方法,但是有一个.col访问器可以从底层驱动程序获取本地Collection对象并使用它的方法。

您对.group()用法有点偏离,所以我将使用我的数据作为例子:

 { "_id" : ObjectId("5479c4793815a1f417f537a0"), "status" : "canceled", "date" : ISODate("2014-11-29T00:00:00.000Z"), "offset" : 30, }, { "_id" : ObjectId("5479c4793815a1f417d557a0"), "status" : "done", "date" : ISODate("2014-10-20T00:00:00.000Z"), "offset" : 30, }, { "_id" : ObjectId("5479c4793815a1f417f117a0"), "status" : "done", "date" : ISODate("2014-12-29T00:00:00.000Z"), "offset" : 30, } 

然后你可以像这样编写一个.group()语句:

  var db = require('monk')('localhost/test'), sample = db.get('sample'); sample.col.group( ["status"], {}, { "count": 0 }, "function (obj,prev) { prev.count++; }", function(err,docs) { if (err) console.log(err); console.log( docs ); } ); 

但是,这也表明,99%的时间,你可能真的想.aggregate()方法,而不是:

  var db = require('monk')('localhost/test'), sample = db.get('sample'); sample.col.aggregate( [ { "$group": { "_id": "$sample", "count": { "$sum": 1 } }} ], function(err,docs) { if (err) console.log(err); console.log( docs ); } ); 

聚合框架通常比.group()更灵活,运行本地代码运算符而不是解释JavaScript,所以这是非常值得学习的。

就像错误消息所述,它显示Collection对象不具有group()作为方法。 这是你正在处理的东西的来源

而且看起来其他人过去也遇到过这个问题。

我不太了解和尚(对不起),但看起来这是很有前途的,所以复制RomanGorbatko的解决scheme可能是你需要的。