猫鼬动态地将相同的模型保存到多个集合中

时间:2020-10-10 05:15:25

标签: mongoose nestjs

是否可以将猫鼬注入的模型保存到多个集合中? (nestjs吸气)

我正在寻找类似的东西

injectedMode.collection('collectionA').save(data);
injectedMode.collection('collectionB').save(data);

有时候我需要将模型保存到一个集合中,有时还要保存到另一个集合中。
请记住,模型是注入的,在我的情况下,我希望每个客户都有一个集合。因此同一模型需要动态保存到特定集合

谢谢

1 个答案:

答案 0 :(得分:0)

NestJS允许您访问本机Mongoose Connection,这反过来又提供了对连接的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);
  }
}

像这样使用它:

this.dynamicMongoDbService.insert(Cat, data);
this.dynamicMongoDbService.insert(Dog, data);