首页 > 解决方案 > 我无法通过使用 node.js 和 mongoose 对 id 进行硬编码来完成任何本地 mongodb 查询

问题描述

我有这个非常基本的行来通过 node.js mongoose 查询本地 mongodb 集合以查找具有其 id 的文档然后更新它:

mongoose.connect(...).try(...).catch(..)
const Author = mongoose.model("Author", new mongoose.Schema(...))

async function updateAuthor(authorId){
  try {
    const author = await Author.findById(authorId);
    author.name = "new name";
    await author.save()
  } catch (err) { console.log(err)}
}

getAuthor("[an existing author id in my local mongodb]")

当我连接到我遥远的 Atlas mongodb 并在那里查询时,这非常有效。当我在本地 mongodb 上尝试相同的代码时,如果我通过带有 json: getAuthor(req.body.id) 的邮递员的 url 调用给 getAuthor() 一个 id,我也可以让它工作

但是,当我尝试对从本地 mongodb 复制的 id 进行硬编码(例如 getAuthor("555fff5555ffff55555"))时,我无法使其工作,我收到错误“TypeError: Cannot read property 'author' of null”,因为author 为空,因为 findById() 没有返回任何内容。

我尝试了谷歌告诉我做的一些不同的事情,但这些都没有奏效:

findById(new mongoose.Types.ObjectId("555fff5555ffff55555"))
find({ _id: "555fff5555ffff55555"})
find({ "_id": "555fff5555ffff55555"})

通过 antoher 属性(例如按名称)进行的任何其他查询都可以正常工作。

我遵循 Mosh 课程,他也使用 findById() 并且他将 id 硬编码为简单的字符串,没有任何问题。我试图卸载猫鼬并安装与他相同的版本,但我仍然遇到同样的问题。findByID、findByIdAndUpdate 或 findByIdAndDelete 都不起作用。有谁知道为什么我不能在本地 mongodb 上按 Id 查询?

我的本地版本是:

mongod -version: v4.4.1 // MongoDB

npm list mongoose: `-- mongoose@5.10.9

标签: node.jsmongodbmongoose

解决方案


唯一可能的问题可能是您正在查询的 id 没有这样的文档。


推荐阅读