【问题标题】:How does a Mongoose Schema map to a collection in MongoDB?Mongoose Schema 如何映射到 MongoDB 中的集合?
【发布时间】:2021-10-09 14:04:43
【问题描述】:

为这个非常基本的问题道歉,但我有点困惑。我在我的 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 是否会寻找要映射到的模型的复数名称? 干杯,马特

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

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

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

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

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

    我们可以看看他们的代码库,当你调用mongoose.model,内部调用this function gets called,其中in return pluralize你的模型名称并在Mongodb中创建一个集合。

    看起来像是从 5.0 Mongoose 开始,也为我们提供了disable pluralization的途径

    【讨论】:

    • 我希望这能让你清楚。
    • 非常好,感谢您抽出宝贵时间 Anirudh。我一直在查看文档的架构部分,而不是模型。再次感谢
    • 没问题,很高兴能帮上忙
    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多