【问题标题】:I want to get a model with a hyphen included name我想得到一个带有连字符的模型
【发布时间】:2021-04-09 20:05:13
【问题描述】:

名称正常的模型可以获得结果。

但是,名称中包含连字符的模型无法获得结果。

users-permissions,user 包含数据。

const db = await mongoose.connect("mongodb://URL", {...});


const userModel= db.model("user", new mongoose.Schema({}));
const usersPermissionsModel = db.model("users-permissions", new mongoose.Schema({}));


console.log(await userModel.find().limit(1)) // Object data
console.log(await usersPermissionsModel.find().limit(1)) // [], null array

我认为模型名称中有一个连字符,所以它不会查询。对吗?

有解决办法吗?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    TL;DR

    - 在 mongo 集合中没有问题,mongoose 命名约定也不会修改您的 users-permissions 集合名称。检查您的数据库,如果您有正确的集合名称,并且集合中有文档。


    当您在 mongoose 中创建架构和模型时,mongoose 将在数据库中创建集合时自动应用它自己的命名约定。

    这通常没问题,但看起来您已经在 mongodb 中有一些数据,您正尝试使用 mongoose 访问这些数据。您可以像这样覆盖集合名称:

    const usersPermissionsSchema = new mongoose.Schema({}, { collection: 'users-permissions' })
    const usersPermissionsModel = db.model("users-permissions", usersPermissionsSchema);
    

    来自架构文档:

    选项:收藏

    默认情况下,Mongoose 通过将模型名称传递给 utils.toCollectionName 方法来生成集合名称。此方法将名称复数。如果您的收藏需要不同的名称,请设置此选项。

    令人讨厌的是 utils.toCollectionName 没有记录,但查看source code

    这让我找到了另一个包含复数方法的repo,以及一个关于命名约定的SO question。

    但是该复数方法中的规则不会影响您的"users-permissions" 名称,因此我认为您实际上可能有错字或该集合中不存在模型。通过 CLI 或 NoSQLBooster 等 GUI 工具检查您的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 2014-11-19
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多