首页 > 解决方案 > 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 是否会寻找要映射到的模型的复数名称?干杯,马特

标签: mongodbmongoosemongoose-schema

解决方案


从 Mongoose 文档本身的一些链接中引用

  1. Mongoose 中的一切都以 Schema 开始。每个模式映射到一个 MongoDB 集合并定义该集合中文档的形状。链接到文档

  2. 第一个参数是您的模型所针对的集合的单数名称。Mongoose 会自动查找您的型号名称的复数、小写版本。因此,对于上面的示例,模型 Tank 用于数据库中的 tank 集合。链接到文档

从文档中,很明显他们会自动处理单数模型名称到复数的转换。

我们可以看看他们的代码库,当你调用 时,在mongoose.model内部调用这个函数,它返回复数你的模型名称并在 Mongodb 中创建一个集合。

看起来像是从 5.0 Mongoose 开始,也为我们提供了一种禁用复数的方法


推荐阅读