我正在将Node.js与MongoDB结合使用,更具体地说,是MongoLab和Mongoose。
在数据库中,我有两个集合:倾倒和用户。一个用户对象将通过一个共享的cid链接到多个倾倒对象。
我需要遍历一系列用户对象。但是for循环不适用于我想用来修改数组的asyn函数。
express.leaderboard = new Array();
mongoose.Users.find(function(err, users) {
for (var i = 0; i < users.length; i++) {
express.leaderboard[express.leaderboard.length] = users[i];
};
for (i = 0; i < express.leaderboard.length; i++){
updateOunces(i, function(a, fluidOunces){
console.log(a);
express.leaderboard[a].set('totalOunces', fluidOunces);
});
}
});
这是我的功能,它将为用户检索总的FluidOunces。
function updateOunces(i, callback){
//console.log(express.leaderboard[b].cid);
mongoose.Pours.find({
"cid": express.leaderboard[i].cid
}).exec(function(err, result) {
var userOunces = 0.0;
if (!err) {
for (i = 0; i < result.length; i += 1) {
for(j = 0; j < result[i].pour.length; j += 1){
userOunces += result[i].pour[j].fluidOunces;
}
}
callback(i, userOunces);
return;
express.leaderboard[i].set ('totalOunces' , userOunces);
} else {
console.log(err)
};
});
};
有没有一种方法可以迭代并向排行榜数组中的每个对象添加新属性?使用ASYN吗?谢谢!
最佳答案
使用async库。
例)
mongoose.Users.find(function(err, users) {
async.each(users, function(user, callback) {
// perform updates here, per user.
callback();
}, function(err) {
// everything is complete.
});
});