首页 > 解决方案 > Mongoose 不会执行 findById 回调

问题描述

我开始失去理智了。为什么这个简单的猫鼬命令不起作用?由于架构更改,我正在编写一个脚本来更新数据库中的项目,无论出于何种原因,我都无法让实际的更新方法正常工作......就像这样。他们不会出错或任何事情。他们只是不执行。我的脚本中的其他所有内容(与数据库连接交互)都执行得很好。

这是我的代码的 jist:

const db = require('../../server/db');


async function itemMigration() {

  const items = await db.Items.find().exec();

  if (items) {
    items.forEach( async item => {
      console.log(item); // this works! It logs the item to my console.

      // this doesn't do anything.
      await db.Items.findById(item._id, (err, doc) => {
        if (err) {
          console.log(err)
        }
        console.log(item.type)
        doc.set(item);
        doc.save();
      })
    }
  }
}

我期望这段代码做的是items在我的数据库中找到所有内容,遍历它们,然后更新每一个。第一部分按预期工作。我得到项目并将每个项目记录到控制台。该findById()部分是不执行的。我已经尝试过使用/不使用await命令...没有区别。我应该在控制台上看到日志,但没有出现 ‍♂️‍♂️</p>

标签: javascriptmongodbmongoose

解决方案


等待异步函数时,不应提供回调函数。

这就是您的代码的样子:

try {
    const doc = await db.Items.findById(item._id)
    doc.set(item);
    await doc.save();

} catch (error) {
    console.error(item.type)   
}

PS: 如果您希望以正确的顺序删除项目,只需使用常规async并在其正文中删除。items.forEach( async item ...
forawait


推荐阅读