1
我是Nodejs和MongoDB的新手。
這裏是我的數據集的樣本:Nodejs + Mongodb:聚合後查找數據
{
'name': ABC,
'age':24,
'gender':male,
...
}
一般來說,我想要做的就是利用他們找不同的數據集羣前彙總數據。
具體而言,我想知道在不同年齡有多少人。然後,找到每個年齡段的人(文件)並存儲它們。
這裏是我的代碼:
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循環造成的。
我不知道如何處理異步回調。
感謝。但在這一行發生錯誤 - '文檔':{'$ push':'$$ ROOT'}。 SyntaxError:意外的字符串 –
錯字,忘在'total'後面加一個逗號:{'$ sum':1}' – chridam
它有效。非常感謝。 –