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 灵活得多,并且运行本机代码运算符,因此非常值得学习。