Mongoose将同一模型动态保存到多个集合
是否可以将mongoose注入模型保存到多个集合?(nestjs指令) 我在找像这样的东西Mongoose将同一模型动态保存到多个集合,mongoose,nestjs,Mongoose,Nestjs,是否可以将mongoose注入模型保存到多个集合?(nestjs指令) 我在找像这样的东西 injectedMode.collection('collectionA').save(data); injectedMode.collection('collectionB').save(data); 有时我需要将模型保存到一个集合,有时保存到另一个集合。 请记住,模型是注入的,在我的情况下,我希望每个客户都有一个集合。因此,同一个模型需要动态地保存到特定的集合中 感谢NestJS允许您访问本机,本机
injectedMode.collection('collectionA').save(data);
injectedMode.collection('collectionB').save(data);
有时我需要将模型保存到一个集合,有时保存到另一个集合。请记住,模型是注入的,在我的情况下,我希望每个客户都有一个集合。因此,同一个模型需要动态地保存到特定的集合中
感谢NestJS允许您访问本机,本机反过来提供对连接的
db
-对象的访问,因此您可以创建以下服务:
@Injectable()
export class DynamicMongoDbService {
constructor (@InjectConnection() private connection: Connection) {
}
async insert(collectionName: string, data: any) {
return this.connection.db.collection(collectionName).insert(data);
}
}
然后相应地使用此服务:
this.dynamicMongoDbService.insert('collectionA', data);
this.dynamicMongoDbService.insert('collectionB', data);
编辑: 如果模型在编译时已知,您还可以创建一个服务,该服务将注入所有必需的模型并将它们存储在映射中。然后,在使用该服务时,您可以动态决定从哪个模型中选择并委托给它:
@Injectable()
export class DynamicMongoDbService {
private modelMap: Record<string, Model<any>>;
constructor (
@InjectModel(Cat.name) catModel: Model<Cat>,
@InjectModel(Dog.name) dogModel: Model<Dog>) {
this.modelMap = {
[Cat.name]: catModel,
[Dog.name]: dogModel
};
}
async insertDynamically<M, T> (modelType: typeof M, data: T) {
const model = this.modelMap[modelType.name];
return model.save(data);
}
}
通过这样做,我是否失去了注入模型的能力,以及强大类型功能和API的所有好处,不是吗?我还能用这个模型吗?。那么查询呢?非常感谢。这是真的,也许还有另一种方法——我会考虑:)编辑答案,你觉得这个主意怎么样?很好,但问题是我需要每个客户收集一个(每个客户都有一个孤立的云)。因此,我可能不得不:
customerA:Model
——在编译时还不知道。。。谢谢你的帮助。
this.dynamicMongoDbService.insert(Cat, data);
this.dynamicMongoDbService.insert(Dog, data);