我想使用基于当前年份的动态集合名称。
例如:从“产品”到“产品2020”。
使用NESTJS,我必须导入具有特定集合名称的“module.forFeature”。
import { Module } from '@nestjs/common'
import { MongooseModule } from '@nestjs/mongoose'
@Module({
imports: [
MongooseModule.forFeature([
{
name: 'Products',
schema: ProductsSchema
}
])
],
controllers: [ProductsController],
providers: [ProductsService]
})
服务时的注入也是如此:
import { Injectable } from '@nestjs/common'
import { InjectModel } from '@nestjs/mongoose'
import { Model } from 'mongoose'
@Injectable()
export class ProductsService {
constructor(
@InjectModel('Products')
private readonly productsModel: Model<Products>
) {}
}
最后,这是我的模式:
import { Schema } from 'mongoose'
export const ProductsSchema = new Schema(
{
_id: { Type: String, required: true },
code: String
},
{
collection: 'Products'
}
)
是否有某种方法可以实现动态命名?
多谢了!
2条答案
按热度按时间q5iwbnjs1#
我偶然发现了一个类似的问题,我解决的方法是使用
MongooseModule.forFeatureAsync
方法。模型和模式声明与nestjs文档中的相同。r8xiu3jd2#
我一直在寻找解决这类问题的方法,但我遇到了一堵墙,没有明确的方法来做这件事。
以下(最少)代码示例化服务,每个服务根据
country parameter
绑定到特定模型。即,ServiceX
绑定到数据库X的模型,ServiceY
绑定到数据库Y中的相同模型但这里是我设法做到的。你绝对可以做一个工作来满足你的需要
首先是模型/接口。通常用于不同服务之间
对于不同数据库/集合中的每个模型,服务定义实际上是相同的
对于模块,我创建了一个
DynamicModule
Model
并将其绑定到一个Service
,这样服务的示例化将是正确的仅供参考,数据库模块看起来像常数
dbname
是连接名称,uri
是连接字符串。至于控制器,只有一个通过请求参数
:country
处理每个服务。但首先我必须列出所有可能的模型和服务,以包括在应用程序中。最后,使用
XUserModule.register()
在AppModule中导入该模块