我正在尝试运行聚合MongoDB和Nodejs,但是在运行项目时遇到了一些困难.当我在MongoDB shell中输入以下命令时:
db.data.aggregate([{$match: {}},{$group: {'_id': '$State', 'total': {'$sum': 1}} }]).toArray()
Run Code Online (Sandbox Code Playgroud)
然后我得到了预期的输出.
但是,当我使用以下小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();
});
Run Code Online (Sandbox Code Playgroud)
然后我收到错误消息:'TypeError:无法读取属性'toArray'of undefined'
有人可以帮帮我吗?
非常感谢Andi
正如 @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);
});
};
Run Code Online (Sandbox Code Playgroud)
调用aggregateStates函数:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
aggregateStates(db, function() {
db.close();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3609 次 |
| 最近记录: |