node.js - 在 NodeJS 和 MongoDB 中未定义的 toArray

标签 node.js mongodb


我正在尝试运行聚合 MongoDB 和 Nodejs,但是在运行该项目时遇到了一些困难。 当我在 MongoDB shell 中输入以下命令时:

 db.data.aggregate([{$match: {}},{$group: {'_id': '$State', 'total': {'$sum': 1}} }]).toArray() 

然后我得到了预期的输出。
但是,当我使用下面的小 Nodejs 程序时

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
  if(err) throw err;

  console.log("Connected correctly to server");

  var col=db.collection('data');

  col.aggregate([{$match: {}},{$group: {'_id': '$State', 'total': {'$sum': 1}} }])
    .toArray(function(err, result) {     
       if(err) throw err;
       console.log(result);             
    });

  db.close();

});

然后我收到错误消息: 'TypeError: 无法读取未定义的属性'toArray'

有人可以帮帮我吗?

提前非常感谢,安迪

最佳答案

正如@ExplosionPills 正确指出的那样,您的代码将无法工作,因为日志记录是异步完成的,并且在连接关闭之后,您可以尝试删除 db.close() 行或创建一个使用回调函数返回聚合结果的函数:

var aggregateStates = function(db, callback) {
   db.collection('data').aggregate(
     [
         { $group: { "_id": "$State", "total": { $sum: 1 } } }
     ]
   ).toArray(function(err, result) {
         console.log(result);
         callback(result);
   });
};

调用聚合状态函数:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
    aggregateStates(db, function() {
        db.close();
    });
});

关于node.js - 在 NodeJS 和 MongoDB 中未定义的 toArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32531215/

相关文章:

node.js - Mongoose 或查询

javascript - 使用 Grunt (Yeoman) 的多个构建文件夹(多个客户端、多任务、多个目标)

javascript - 在 nodejs 中 'inspect' 就像一个保留字

javascript - 请求快速路线时出现 404

javascript - MongoDB 批量插入操作而不是 For 循环

mongodb - 在不知道架构/集合名称的情况下获取 Mongoose 架构和文档?

java - findAndModify 失败并出现错误 : "Cannot update ' field 1' and ' field1' at the same time

javascript - 在通过meteor的publish方法提供数据之前添加来自另一个mongodb集合的信息

node.js - 链接的模块显示为未满足的依赖关系

node.js - web3.js部署时如何获取智能合约地址