[英]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.