【发布时间】:2021-11-26 04:42:03
【问题描述】:
我有一个 MERN 应用程序,它使用 mongoose 连接到 MongoDB Atlas。虽然 Atlas 的平均响应时间小于 300 毫秒,但每隔一段时间就会超过 30 秒,一切都变得不可用。我想知道我处理与数据库的连接的方式是否有问题?
目前在我的app.js 文件中:
mongoose.connect(`mongodb+srv://<db name>:${process.env.DB_PASSWORD}@<...>.kea2z.mongodb.net/<...>?retryWrites=true&w=majority`, {useNewUrlParser: true, useUnifiedTopology: true})
在我的routers.js 文件中,我处理如下路由:
import { Post } from './models.js'
...
const postRouter = express.Router()
postRouter.get('/', async (req, res) => {
try {
const posts = await Post.find()
return res.json(posts)
} catch(e) {
console.log(`Error while indexing posts: ${e}`)
return res.status(404).json('An error has occurred!')
}
})
...
例如,上面的 Post 集合有 50 个文档,总大小为 2MB,但简单的 Post.find() 查询需要超过 30 秒才能完成。我还有其他四个类似的收藏;包括大小为 65MB 的图像集合。我查询数据库的方式有问题吗?
更新 1:
我已将所有图像移至云端,所以现在我的数据库只存储它们的 URL。然而,查询Post 集合仍需要大约 15 秒,该集合大小为 1.3MB,包含 50 个文档。万一错误的模式定义可能导致它,这里是它的模型:
const Post = mongoose.model('Post', new mongoose.Schema({
slug: String,
title: String,
authors: [String],
date: Date,
categories: [String],
content: String
}))
【问题讨论】:
-
可以添加
Post数据模型吗? -
@AminTaghikhani 是的 - 请查看我编辑的帖子
标签: node.js mongodb express mongoose mongodb-atlas