Nodejs + Mongodb:聚合后查找数据

我是Nodejs和MongoDB的新手。
以下是我的数据集示例:

{ 'name': ABC, 'age':24, 'gender':male, ... } 

一般来说,我想要做的就是在使用它们来查找不同的数据集群之前对数据进行聚合。
具体来说,我想知道有多less人在不同的年龄段。 然后,find每个年龄段的人(文件)并存储它们。

这是我的代码:

 MongoClient.connect(url, function(err, db) { if(err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else { db.collection('test').aggregate( [ { $group: { _id: "$age" , total: { $sum: 1 } } }, { $sort: { total: -1 } } ]).toArray(function(err, result) { assert.equal(err, null); age = []; for(var i in result) { age.push(result[i]['_id']) }; ageNodes = {}; for(var i in age) { nodes = []; var cursor = db.collection('test').find({'age':age[i]}); // query based on aggregated data cursor.each(function(err,doc){ if(doc!=null){ nodes.push(doc); } else { console.log(age[i]); ageNodes[age[i]] = nodes; } }) } res.json(ageNodes); }); }; }); 

我预期的JSON格式:

 { age:[different documents] } 

例:

 { 20:[{name:A,gender:male,...},{},...], 30:[{name:B,gender:male,...},{},...], ... } 

但是,我得到的是一个空的结果,所以我想也许这是由for循环造成的。
我不知道如何处理asynchronouscallback。

您只需运行以下使用$pushpipe道将根文档(由pipe道中的$$ROOT系统variables表示)添加到每个时间组的数组:

 MongoClient.connect(url, function(err, db) { if(err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else { db.collection('test').aggregate([ { '$group': { '_id': '$age', 'total': { '$sum': 1 }, 'docs': { '$push': '$$ROOT' } } }, { '$sort': { 'total': -1 } } ]).toArray(function(err, results) { console.log(results); var ageNodes = results.reduce(function(obj, doc) { obj[doc._id] = doc.docs return obj; }, {}); console.log(ageNodes); res.json(ageNodes); }); }; });