我正在使用express,nodejs和尚。

集合包含以下对象:
{_id, valueField}

假设_id在插入时被覆盖,集合中5个文档的id在1到5之间。它们都是整数。

这就是我现在正在尝试的-但我认为语法不正确。该函数返回错误500,甚至从不进入console.log(e)。

我想在集合中找到所有_id大于10的对象。

collection.aggregate([
                { $match: {
                    "_id":{$gt: 3}
                }},
                { $group: {
                    _id: null,
                    flow: { $avg: "$value"  }
                }}
            ], function (e, docs) {
                if (e) {
                    console.log(e);
                    return;
                }
                console.log(docs);
                res.json(docs);
            });


我之前编写的用于获取所有ID大于10的元素的函数可以正常工作:

collection.find({"_id":{$gt: 3}}, {}, function(e,docs){
            res.json(docs);
        });




集合内容:

{
  "_id": 1,
  "value": 10
}

{
  "_id": 2,
  "value": 5
}
{
  "_id": 3,
  "value": 4
}

{
  "_id": 4,
  "value": 12
}
{
  "_id": 5,
  "value": 10
}


预期结果:

{
 "_id": null,
 "value": 11
}

最佳答案

啊!应该早点看到这个。抱歉。

您需要.col.aggregate()访问器:

var db = require('monk')('localhost/test');
var junk = db.get('junk');


junk.col.aggregate(
  [
    { "$match": { "_id": { "$gt": 3 } } },
    { "$group": {
      "_id": null,
      "flow": { "$avg": "$value" }
    }}
  ],
  function(err,docs) {
    if (err) throw err;
    console.log( JSON.stringify( docs, undefined, 2 ) );
  }
);


由于在本机“ Monk” API下本机不支持.aggregate()作为功能,因此需要对基础“ Node Native”集合进行“深入研究”。

很抱歉。

09-07 07:54