mongodb - Mongoose Schema 如何映射到 MongoDB 中的集合?
问题描述
为这个非常基本的问题道歉,但我有点困惑。我在我的 Express + Node 服务器中使用 Mongoose 发布到 Mongo,我刚刚意识到这两个模型/模式与它们发布到的 MongoDB 中的集合的名称不完全相同。一切正常,API 端点发布到正确的集合,但我不知道如何或为什么。Mongoose 模型/模式和 MongoDB 集合之间的联系是什么?
显然,我的 MONGODB_URI 环境变量指向我的数据库,但没有其他对集合的引用,特别是 API 端点应该发布到哪个集合,除了模型,它是集合的不同名称。
例如,下面的我的Post模型确实(通过 api)将数据发送到posts集合,但我无法弄清楚它是如何知道这是正确的集合并且它困扰着我。
const PostSchema = new Schema({
...
});
const Post = mongoose.model('Post', PostSchema);
module.exports = Post;
作为测试,我将上面的变量完全重命名为完全不相关的东西
const TrevorSchema = new Schema({
...
});
const Trevor = mongoose.model('Trevor', TrevorSchema);
module.exports = Trevor;
并且创建了一个具有复数名称模型的新集合,创建了“Trevors”,那么 Mongoose 是否会寻找要映射到的模型的复数名称?干杯,马特
解决方案
从 Mongoose 文档本身的一些链接中引用
Mongoose 中的一切都以 Schema 开始。每个模式映射到一个 MongoDB 集合并定义该集合中文档的形状。链接到文档
第一个参数是您的模型所针对的集合的单数名称。Mongoose 会自动查找您的型号名称的复数、小写版本。因此,对于上面的示例,模型 Tank 用于数据库中的 tank 集合。链接到文档
从文档中,很明显他们会自动处理单数模型名称到复数的转换。
我们可以看看他们的代码库,当你调用 时,在mongoose.model
内部调用这个函数,它返回复数你的模型名称并在 Mongodb 中创建一个集合。
看起来像是从 5.0 Mongoose 开始,也为我们提供了一种禁用复数的方法
推荐阅读
- django - 从 Django 模板传递数据以响应 App
- docker - 无法杀死每 10 秒重新启动的 docker
- c - fgetc 与 fread 哪个更有效?
- python - Pytesseract 在乌尔都语和阿拉伯语文本中不返回任何内容
- java - '尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)'的致命异常'
- laravel - Laravel 中间件登录重定向
- java - 在java中解决此代码时面临循环问题
- html - 如何以角度跟踪 Double ngFor 循环中的索引?
- javascript - 了解 JavaScript 中的标记和扫描算法
- javascript - 当滚动未完成时不要再次滚动事件