我正在将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.
  });
});

10-04 22:24
查看更多