簡體   English   中英

貓鼬,無法使用for循環更新模型

[英]Mongoose, can't update model with for loop

我正在使用貓鼬做一個javascript函數,以找到一個包含用戶電子郵件列表的組,該部分可以很好地工作。 我想找到列表中的每個用戶並添加新的組名而不是舊的組名后,我不知道為什么,但是它不起作用,該函數在執行for循環之前返回了該組,並且用戶沒有被修改。

這是我的用戶模型:

var userSchema = mongoose.Schema({

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

這是我的小組模型:

var groupSchema = mongoose.Schema({

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

這是我的功能:

 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);

您可以使用異步來解決回調問題

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);
});

如果我犯了任何錯誤,請原諒我,總是很難編寫沒有數據的代碼,希望您能理解我要解決的問題。

別忘了

var async = require('async');

一開始

僅在for循環完成后才應執行user.save() 我使用forEach更新了for循環, forEach感覺更舒適。

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!'});
    }        
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM