node.js - 我无法通过使用 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
解决方案
唯一可能的问题可能是您正在查询的 id 没有这样的文档。
推荐阅读
- javascript - 使用 FormControl 订阅输入类型文件更改?
- javascript - bindActionCreators,React-Redux 中的@connect 和理解代码
- python - Problem with a query: duplicate value different forms (SQL) using Python
- python - Python + MySQL.Connector-Python:带有函数定义变量的 select_statement
- javascript - 如何在打字稿中键入 3 参数柯里化函数?
- javascript - 有没有办法通过代码将长字符串压缩为较小的字符串,反之亦然?
- java - 在不使用元素数组的情况下从“forEach”赋值
- colors - 如何设置滑块制作的海龟颜色?
- reactjs - Webpack 4 中的代码拆分和动态加载以及可加载的反应
- android - Gradle 错误:发现多个文件与操作系统无关路径 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version'