我正在尝试运行聚合 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/