【问题标题】:forEach in mongoDB array not workingmongoDB数组中的forEach不起作用
【发布时间】:2017-04-06 12:13:28
【问题描述】:

我有一个 mongodb 模型,例如:

Data = {
   dataID: String,
   myarray:[]
}

我需要遍历 myarray

在我的 API 中我是这样写的

Data.findOne({dataID: '1234567890'}, function(err, data){
   data.myarray.forEach(function(toMatch, index){
       data.myarray[index].key = value;
   });

   data.save(function(err, data){
        if (err) {
            return res.status(500).send(err);
        }
        return res.status(200).send(data)
   })
});

但 data 没有被保存,因为 nodejs 在 forEach 循环结束之前执行 data.save

我使用游标迭代MongoDB find()函数,但是如何迭代mongodb文档中的数组,等待它完成执行然后调用data.save

【问题讨论】:

  • hmm.. 我没有看到返回到调用 findOne 回调的文档的任何文档。 .forEach 只是 Array.prototype.forEach 吗?如果是……那么我认为您误诊了问题。

标签: node.js mongodb


【解决方案1】:

Mongodb find 返回数组,因此在您的情况下,数据将是数组,而 data.myarray 将未定义,您也无法执行数据保存

【讨论】:

  • 抱歉打错了假设我们用 Data.findOne({}) 代替 Data.find({})
  • forEach 不是异步的,它是阻塞的,所以 data.save 不能在 forEach 完成迭代之前执行,还有一个问题,我注意到你返回 player 是什么?
  • 是的,这里没有发生,data.save 没有将数据保存在数据库中(它不是玩家只返回它的数据返回)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2019-11-27
  • 2018-06-30
  • 1970-01-01
  • 2021-06-01
  • 2021-02-24
  • 1970-01-01
相关资源
最近更新 更多