在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可能是你需要的。