node.js-mongodb中的分组依据

node.js-mongodb中的分组依据,node.js,mongodb,mongodb-query,aggregation-framework,monk,Node.js,Mongodb,Mongodb Query,Aggregation Framework,Monk,我想在我的server.js中使用group by,但出现以下错误: 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'], {}, {},

我想在我的server.js中使用group by,但出现以下错误:

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);
});
谁能告诉我怎么了?
谢谢大家!

如错误消息所述,
Collection
对象似乎没有
group()
作为方法

看起来


我不太了解使用monk(抱歉),但它看起来非常受承诺驱动,所以复制粘贴RomanGorbatko的解决方案可能就是您所需要的。

如错误消息所述,似乎
集合
对象没有
组()
作为方法

看起来

我对使用monk不太了解(抱歉),但它看起来非常受承诺驱动,所以复制粘贴RomanGorbatko的解决方案可能是您所需要的。

monk本身并没有实现方法,但是有一个
.col
访问器可用,您可以从底层驱动程序获取本机对象并使用其方法

您对的使用有点不正确,因此我将使用我的数据作为示例:

{
    "_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%的情况下,你可能真的希望使用这种方法:

  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,因此非常值得学习。

Monk本身没有实现方法,但是有一个
.col
访问器可用,您可以从底层驱动程序获取本机对象并使用其方法

您对的使用有点不正确,因此我将使用我的数据作为示例:

{
    "_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%的情况下,你可能真的希望使用这种方法:

  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
variable和all?请您提供更多详细信息。比如什么是
collection
variable and all?不确定你是否有个人兴趣,或者只是把你找到的链接作为答案发布。但是您可以使用monk调用
.group()
或任何本机收集方法。只需使用
.col
访问器即可。我不知道,感谢您选择了正确的答案:)不确定您是否个人感兴趣或只是将您找到的链接作为答案发布。但是您可以使用monk调用
.group()
或任何本机收集方法。只需使用
.col
访问器即可。我不知道这一点,感谢您选择正确答案:)