【问题标题】:Is there a way to avoid the first parameter of mongoose.model() altogther?有没有办法完全避免 mongoose.model() 的第一个参数?
【发布时间】:2021-11-24 20:47:41
【问题描述】:

我们想在我们的 MongoDB 数据库集合中使用驼峰式。

但是如果我们像这样将模型的名称作为第一个参数传递:

const CompanyEmployeeModel = mongoose.model("CompanyEmployeeModel", Schema);

Mongoose 在数据库中创建一个全小写的复数集合名称。

companyemployeemodels

为了避免这种情况,我们传递了第三个参数与集合名称的确切名称:

const CompanyEmployeeModel = mongoose.model("CompanyEmployeeModel", Schema, "companyEmployeeModels");

这通常有效,但随后:

  1. 第一个参数好像没用了
  2. 有时在创建 API 时使用 nodemon,在输入第三个参数之前,Mongoose 会执行代码并在名为 e.g. 的数据库中创建集合。 companyemscompanyemployeemos 甚至还有一次 s (!)

我们怎样才能完全避免这个第一个参数,所以我们只需发送 Schema 和集合名称,这样代码就更清晰,Mongoose 不会在数据库中创建不需要的集合?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    根据我的经验,您通常不能。

    1. mongoose 需要一种方法来区分不同的集合,以使 mongoose 的功能正常工作。例如,您可以在其中一个模型的字段中包含ref 属性,该字段引用集合名称。这样,您可以使用model.populate 函数,而无需表达如何填充某个字段。另请注意,第一个参数指定 modelcollection 的名称(只是其复数形式)。因此,通过取出模型进行重命名可能会更清晰。

    2. 我不确定这里发生了什么。到目前为止,CamelCase 对我来说从未失败过。但是,对于上面的行,根据我的经验,您可以跳过第三个参数,因为 mongoose 会自动处理集合命名。也许您的代码在其他地方发生了其他事情,导致集合命名错误。我不知道。

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 2012-08-21
      • 2010-09-24
      • 2019-09-07
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      相关资源
      最近更新 更多