【问题标题】:javascript push to array inside loop during mongoose query and savejavascript 在猫鼬查询期间推送到循环内的数组并保存
【发布时间】:2013-07-12 06:33:58
【问题描述】:

我不知道在执行 mongoose 查询并保存后构造 Javascript 以返回更新的 json 对象列表。

目前我正在尝试类似于下面的代码但没有运气。 resBankMembers 数组始终为空。

请求正文中的 JSON:

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

代码示例(不工作):

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

请帮忙!

【问题讨论】:

  • 添加控制台到保存功能。控制台变量bankmember 并告诉我它在安慰什么。
  • 在保存函数的 else 块中,bankmember 正是我想要的... { _id : (some object id), name : (some name) }.
  • 我需要放入各种控制台,以便您可以准确地看到正在发生的事情。推送后添加console.log(resBankmembers)。看看会发生什么。

标签: javascript json mongoose push


【解决方案1】:

试试这个:

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

不要尝试将对象推入数组,只需更新已解析的JSON

我还建议将其用于save 函数中的else

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

以防您稍后扩展 bankmember 对象。

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

除非你不想支持 IE。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2019-10-13
    • 2018-07-25
    • 1970-01-01
    • 2016-01-29
    • 2019-03-22
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多