使用node.js和mongoose的mapReduce

拉胡尔·甘古利(Rahul Ganguly)

我正在尝试计算每个地区的学生人数。我有一个看起来像模型

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var studentSchema = new mongoose.Schema(
{
 "name":String,
 "address" :{
     "locality":String
  }
});
module.exports = mongoose.model('Student', studentSchema);

然后我有一些Node.js代码

var Student = require('../../../models/Student');
module.exports.getStudentsBasedOnLocality = function(){
var o = {};
o.map = function () {
    emit(Student.address.locality, 1)
}
o.reduce = function (k, vals) {
    return vals.length
}

Student.collection.mapReduce(o, function (err, results) {
    if(err) throw err;
    console.log(results)
})
};

我得到错误是。关于我可能做错了什么的提示?

TypeError

Cannot read property 'out' of undefined
at Collection.mapReduce (C:\***\node_modules\mongodb\lib\collection.js:2961:21)
at NativeCollection.(anonymous function) [as mapReduce] (C:\***\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:136:28) 
克列丹

尝试mapReduce()直接在模型上而不是在模型的collection属性上调用该方法,方法需要使用out属性作为参数的额外对象:

var Student = require('../../../models/Student');
module.exports.getStudentsBasedOnLocality = function(){
    var o = {},
        self = this;
    o.map = function () {
        emit(this.address.locality, 1)
    };
    o.reduce = function (k, vals) {
        return vals.length
    };

    Student.mapReduce(o, function (err, results) {
        if(err) throw err;
        console.log(results)
    });
};

另一种选择是使用聚合框架,因为聚合在服务器(C ++)中本地运行,而mapReduce生成单独的javascript线程来运行JavaScript代码,因此它具有更好的性能。因此,您可以运行以下aggregation管道以实现相同的结果:

var Student = require('../../../models/Student');
module.exports.getStudentsBasedOnLocality = function(){
    var pipeline = [
        {
            "$group": {
                "_id": "$address.locality",
                "count": { "$sum": 1 }
            }
        }
    ];

    Student.aggregate(pipeline, function (err, results) {
        if(err) throw err;
        console.log(results)
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Mongoose和NodeJS在MapReduce中添加更多字段

来自分类Dev

使用Node.js和Mongoose更新嵌套的子文档

来自分类Dev

使用Node.js和Mongoose的时间戳

来自分类Dev

使用Mongoose和Node.js更新MongoDB中的数据

来自分类Dev

如何使用mongoose.js和node.js继承架构但维护单独的集合

来自分类Dev

Node.js无法使用Promise,Mongoose和GET请求推送到全局数组

来自分类Dev

使用Node.js / Express和Mongoose将图像存储在MongoDB中

来自分类Dev

如何使用Node.js和Mongoose将对象添加到嵌套数组

来自分类Dev

如何检查用户是否使用node.js和mongoose登录

来自分类Dev

使用Node.js,Express,Mongoose和React将图像上传到MongoDB

来自分类Dev

在Node.js和Mongoose中,如何使用变量代替模型名称?

来自分类Dev

无法看到使用Node.js和Mongoose在JSON文档上添加的字段

来自分类Dev

使用Mongoose和Node.js在数组中查找特定对象

来自分类Dev

使用 Node.js 和 Mongoose 从数据库中列出用户

来自分类Dev

无法使用 mongoose、node.js、express 和 async 函数更新文档数据

来自分类Dev

如何使用 node.js 和 mongoose 计算一组文档中的词频

来自分类Dev

安装和使用Node JS

来自分类Dev

安装和使用Node JS

来自分类Dev

缩短Node.js和Mongoose中的ObjectId

来自分类Dev

Node.js结合了Mongoose和Sails Waterline

来自分类Dev

Node.js,Express和Mongoose提供多个静态文件

来自分类Dev

嵌套的MongoDB文档问题(Mongoose和Node Js)

来自分类Dev

Mongoose和Node.js的JavaScript作用域问题

来自分类Dev

Node.js和Mongoose返回2D查询

来自分类Dev

Node.js,Express和Mongoose提供多个静态文件

来自分类Dev

Node.js结合了Mongoose和Sails Waterline

来自分类Dev

我如何使用Node.js和Mongoose计算正价总额,负价总额和总和

来自分类Dev

Node.js和Mongoose:使用for循环检查数据是否存在以及是否插入数据库

来自分类Dev

使用 mongoose 和 node.js 将标头发送到客户端后无法设置标头

Related 相关文章

  1. 1

    使用Mongoose和NodeJS在MapReduce中添加更多字段

  2. 2

    使用Node.js和Mongoose更新嵌套的子文档

  3. 3

    使用Node.js和Mongoose的时间戳

  4. 4

    使用Mongoose和Node.js更新MongoDB中的数据

  5. 5

    如何使用mongoose.js和node.js继承架构但维护单独的集合

  6. 6

    Node.js无法使用Promise,Mongoose和GET请求推送到全局数组

  7. 7

    使用Node.js / Express和Mongoose将图像存储在MongoDB中

  8. 8

    如何使用Node.js和Mongoose将对象添加到嵌套数组

  9. 9

    如何检查用户是否使用node.js和mongoose登录

  10. 10

    使用Node.js,Express,Mongoose和React将图像上传到MongoDB

  11. 11

    在Node.js和Mongoose中,如何使用变量代替模型名称?

  12. 12

    无法看到使用Node.js和Mongoose在JSON文档上添加的字段

  13. 13

    使用Mongoose和Node.js在数组中查找特定对象

  14. 14

    使用 Node.js 和 Mongoose 从数据库中列出用户

  15. 15

    无法使用 mongoose、node.js、express 和 async 函数更新文档数据

  16. 16

    如何使用 node.js 和 mongoose 计算一组文档中的词频

  17. 17

    安装和使用Node JS

  18. 18

    安装和使用Node JS

  19. 19

    缩短Node.js和Mongoose中的ObjectId

  20. 20

    Node.js结合了Mongoose和Sails Waterline

  21. 21

    Node.js,Express和Mongoose提供多个静态文件

  22. 22

    嵌套的MongoDB文档问题(Mongoose和Node Js)

  23. 23

    Mongoose和Node.js的JavaScript作用域问题

  24. 24

    Node.js和Mongoose返回2D查询

  25. 25

    Node.js,Express和Mongoose提供多个静态文件

  26. 26

    Node.js结合了Mongoose和Sails Waterline

  27. 27

    我如何使用Node.js和Mongoose计算正价总额,负价总额和总和

  28. 28

    Node.js和Mongoose:使用for循环检查数据是否存在以及是否插入数据库

  29. 29

    使用 mongoose 和 node.js 将标头发送到客户端后无法设置标头

热门标签

归档