MongoDB 和 Nest.js:为集合定义自定义名称

Posted

技术标签:

【中文标题】MongoDB 和 Nest.js:为集合定义自定义名称【英文标题】:MongoDB and Nest.js: Define a custom name for a collection 【发布时间】:2020-11-23 20:06:04 【问题描述】:

我有这样的架构:

    @Schema()
    export class Pais extends Document 
      @Prop(
        raw(
          codigo:  type: String, index: true, unique: true ,
        ),
      )
      @Prop()
      descripcion: string;
    
    
    export const PaisSchema = SchemaFactory.createForClass(Pais);
    
    PaisSchema.plugin(uniqueValidator,  message: `PATH debe ser único` );

默认情况下,nest.js 会在类名中添加一个 's',因此集合的名称将是 'paiss',但我希望名称是 'paises'。

在我尝试过的模块上:

    @Module(
      imports: [
        MongooseModule.forFeature([ name: 'paises', schema: PaisSchema ]),
      ],

但它没有用。我该如何解决这个问题?

【问题讨论】:

这能回答你的问题吗? Why does mongoose always add an s to the end of my collection name 我想用装饰器方法来利用nestjs的功能,但是我已经做到了,谢谢。 【参考方案1】:

我找到了解决方案,只需要像这样设置 @Schema() 装饰器

@Schema( collection: 'paises' )

【讨论】:

【参考方案2】:

首先。如果您已经创建了一个集合并想将其从复数名称重命名为一个,您可能需要检查以下答案:How can I rename a collection in MongoDB? via mongo shell 或 renaming a collection with mongoDB for Native JS driver。

如果您想定义自己的模式名称并避免使用这种pluralizing 集合形式,请尝试使用Mongoose 驱动程序。它允许您定义自己的模式/模型并完全按照您的需要命名。为此,请使用下面的 sn-p:

let schema = new mongoose.Schema(
    _id: 
        type: String,
    ,
    other_field: String
,
    /** Schema options*/
    timestamps: true
);

let model_db = mongoose.model('collection_name', schema, 'collection');

但是!始终确保您的集合名称不会破坏任何 MongoDB name restictions。

【讨论】:

以上是关于MongoDB 和 Nest.js:为集合定义自定义名称的主要内容,如果未能解决你的问题,请参考以下文章

Nest.js 在护照本地策略中获取请求标头

Nest js 和 typeorm 自定义存储库问题

Nest JS - 客户端验证失败:需要路径

Nest.js 为模型创建静态和实例函数的方法是啥?

在 Nest JS 中发出 http 请求时出现 httpService 未定义错误

Nest JS DTO 和实体模型 JSON 不匹配问题