简体   繁体   English

javascript在猫鼬查询和保存期间推送到数组内部循环

[英]javascript push to array inside loop during mongoose query and save

I don't know to structure the Javascript to return a list of updated json objects after performing a mongoose query and save. 我不知道构造Javascript在执行猫鼬查询并保存后返回更新的json对象的列表。

Currently I'm trying something similar to the code below but with no luck. 目前,我正在尝试类似于下面的代码,但是没有运气。 The resBankMembers array is always empty. resBankMembers数组始终为空。

Json from request body: 来自请求正文的Json:

[
 {
   _id : (some id), 
   name = (some name)
 },  
 { _id : (some id), 
   name = (some name) 
 }
} 

Code example (non working): 代码示例(无效):

var jsonText = JSON.stringify(req.body);
var jsonObject = JSON.parse(jsonText);
var resBankmembers = [];    

jsonObject.forEach(function(updatebankmember) {
    var bid = ObjectID(updatebankmember._id);
    BankMember.findOne({ "_id" : bid }, function(error,bankmember) {
        if (error) {
            console.log(error);
        }
        else {  
            bankmember.name = updatebankmember.name;
            bankmember.save(function (error) {
                if(error) {
                    console.log(error);
                }
                else {
                    resBankmembers.push(bankmember);
                }
            });
        }               
    });
});
res.send(200, resBankmembers);

Please help! 请帮忙!

Try this: 尝试这个:

var jsonText = JSON.stringify(req.body);
var jsonObject = JSON.parse(jsonText);

jsonObject.forEach(function(updatebankmember, i) {
    var bid = ObjectID(updatebankmember._id);
    BankMember.findOne({ "_id" : bid }, function(error,bankmember) {
        if (error) {
            console.log(error);
        }
        else {  
            bankmember.name = updatebankmember.name;
            bankmember.save(function (error) {
                if(error) {
                    console.log(error);
                }
                else {
                    jsonObject[i].id   = bankmember.id;
                    jsonObject[i].name = bankmember.name;
                }
            });
        }               
    });
});
res.send(200, jsonObject);

Instead of trying to push objects into an array, just update the already parsed JSON . 无需尝试将对象推送到数组中,只需更新已解析的JSON

I also recommend using this for the else in the save function: 我还建议将此功能用于save功能中的else

else {
     for (var key in bankmember) {
         jsonObject[i][key] = bankmember[key];
     }
}

In case you expand the bankmember object later on. 如果稍后再展开bankmember对象。

The forEach function isn't supported in IE 8 and Below so I recommend: IE 8及以下版本不支持forEach函数,因此我建议:

if (Array.prototype.forEach) {
    Array.prototype.forEach = function (fun) {
        for (var i = 0; i < this.length; i++) {
            fun.call(this, this[i], i)
        }
    };
}

Unless you don't want to support IE. 除非您不想支持IE。 I hope this helped. 希望对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM