Mongoose Schema 如何映射到 MongoDB 中的集合?

Mat*_*ton 0 mongoose mongodb mongoose-schema

对于这个非常基本的问题表示歉意,但我有点困惑。我在 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;
Run Code Online (Sandbox Code Playgroud)

作为测试,我将上面的变量完全重命名为完全不相关的东西

const TrevorSchema = new Schema({
...
});

const Trevor = mongoose.model('Trevor', TrevorSchema);
module.exports = Trevor;
Run Code Online (Sandbox Code Playgroud)

并且创建了一个带有复数模型名称“Trevors”的新集合,那么 Mongoose 是否会查找要映射到的模型复数名称?干杯,马特

Ani*_*odi 6

参考 Mongoose 文档本身的一些链接

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

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

从文档中可以清楚地看出,他们会自动处理单数模型名称到复数的转换。

我们可以看一下他们的代码库,当您调用 时mongoose.model,内部会调用该函数,这反过来会复数您的模型名称并在 Mongodb 中创建一个集合。

看起来从5.0 Mongoose开始,也给我们提供了禁用复数的方法