2016-04-11 15 views
0

Kullanıcı e-postalarının bir listesini içeren bir grup bulmak için mongoose kullanarak bir javascript işlevi yapıyorum, bu bölüm mükemmel çalışıyor. Listenin her bir kullanıcısını bulmak ve eski grup adı yerine yeni grup adını eklemek istediğimde, nedenini bilmiyorum, ama işe yaramadı, işlev for döngüsünü yapmadan önce grubu bana geri gönderir ve kullanıcılar değiştirilmemiş.Mongoose, döngü için modeli güncelleştiremiyor

var userSchema = mongoose.Schema({ 

    local   : { 
     email  : String, 
     password  : String, 
    } 
    groups   : { type: [String], default: []} 
}); 

Ve işte benim Grup modeli: Burada

var groupSchema = mongoose.Schema({ 

    title   : String, 
    creator  : String, 
    listOfUsers : { type: [String], default: []} 
}); 

Ve fonksiyonu:

Group.findOne({ '_id': groupId}, function (error, group){ 
       var oldTitle = group.title; 
       group.title = req.body.title; 
       group.save(); 
       if(error){ 
        throw (error) 
       } 
       for(var i = 0; i < group.listOfUsers.length;i++){ 
        User.findOne({'local.email': group.listOfUsers[i]}, function(error,user){ 
         if(error){ 
          throw (error) 
         } 
         for(var j=0;j<user.groups.length;j++){ 
          if(user.groups[j] == oldTitle){ 
           user.groups[j] = group.title; 
           user.save(); 
          } 
         } 
        }); 
       } 
       return res.json(group); 
+0

'group.save' de

var async = require('async'); 

unutma zaman uyumsuz işlem, kullanım geri arama veya orada söz. – alexmac

+0

Tamam, bazı örnekler bulmaya çalışıyorum – fandro

cevap

2

i herhangi hata yaptıysanız

async.waterfall(
[ 
    function (callback) { 
     Group.findOne({ 
      '_id': groupId 
     }, function (error, group) { 
      if (error) { 
       throw (error) 
      } else { 
       callback(null, group); 
      } 

     }) 

    }, 
function (group, callback) { 


     for (var i = 0; i < group.listOfUsers.length; i++) { 
      User.findOne({ 
       'local.email': group.listOfUsers[i] 
      }, function (error, user) { 
       if (error) { 
        throw (error) 
       } else { 
        callback(null, user, group); 
       } 

      }); 
     } 
}, 
function (user, group, callback) { 
     var oldTitle = group.title; 
     group.title = req.body.title; 

     for (var j = 0; j < user.groups.length; j++) { 
      if (user.groups[j] == oldTitle) { 
       user.groups[j] = group.title; 
       user.save(); 
      } 
     } 
     callback(null, 'done'); 
} 
], 
function (err, result) { 
    console.info("4"); 
    console.info(err); 
    console.info(result); 
}); 

beni affet geri arama sorunu düzeltmek için zaman uyumsuz kullanabilirsiniz, o ben istedim nasıl anlayacağınızı umuyorum, verileri olmadan kod yazmak her zaman zordur çözmek.

ve başından

0

Sen döngü sonra user.save() yapmalıyım İşte

benim kullanıcı modelidir bitti. Kullanmayı daha rahat hissettiğim forEach ile for döngülerini güncelledim.

Group.findbyId(groupId, function(err, group) { 
    var oldTitle = group.title; 
    group.title = req.body.title; 
    if (group.save()) { 
     listOfUsers.forEach(function(groupUser) { 
      User.findOne({'local.email' : groupUser}, function (err, user) { 
       if(user) { 
        user.group.forEach(function(userGroup) { 
        if (userGroup == oldTitle) { 
         userGroup = group.title; 
        } 
       }) 
       user.save(); 
       } 
      }); 
     }); 
     res.json(group); 
    } else { 
     res.status(400).json({messsage: 'Error while saving group!'}); 
    }   
}); 
+0

Hayır, üzgünüm ama teşekkürler, işe yaramıyor – fandro