id大于10的文档的值字段的平均值

时间:2015-06-12 14:33:44

标签: node.js mongodb mongodb-query aggregation-framework

我使用express,nodejs,monk。

集合由对象组成: {_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
}

1 个答案:

答案 0 :(得分:2)

Arrgh !!应该早点看到这个。遗憾。

您需要.col的{​​{1}}访问者:

.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,所以"深度潜水"到底层" Node Native"收集是必要的。

道歉。