InjectModel()我通过在类构造函数中导入 companyModel 找到了解决方案。
export class CompanyContractService {
constructor(
@InjectModel('CompanyContract')
private readonly companyContractModel: Model<CompanyContract>,
@InjectModel('Company')
private readonly companyModel: Model<Company>,
) {}
}
然后在我的搜索功能中,我用我的搜索字符串查询 companyModel 并将响应存储在一个数组中。
const companies = await this.companyModel
.find({ name: { $regex: `.*${search}.*`, $options: 'i' } })
.exec();
之后,我默认使用正则表达式名称搜索searchArray为我的请求声明了一个数组。$or
const searchArray: {}[] = [
{ name: { $regex: `.*${search}.*`, $options: 'i' } },
];
接下来,我遍历公司数组并将过滤器推入searchArray.
companies.forEach(company => {
searchArray.push({
company: company.id,
});
});
这个数组看起来像这样:
searchArray = [
{ name: { $regex: `.*${search}.*`, $options: 'i' } },
{ company: 'ff40dea498393'},
{ company: 'df43939498393'},
{ company: 'daa4399394393'},
]
最后,我companyContractModel使用我的$or 过滤器进行查询并返回它。
const contracts = await this.companyContractModel
.find({
$or: searchArray,
})
.exec();
return contracts;
我的整个代码:
@Injectable()
export class CompanyContractService {
constructor(
@InjectModel('CompanyContract')
private readonly companyContractModel: Model<CompanyContract>,
@InjectModel('Company')
private readonly companyModel: Model<Company>,
) {}
async search(search: string): Promise<CompanyContract[]> {
const companies = await this.companyModel
.find({ name: { $regex: `.*${search}.*`, $options: 'i' } })
.exec();
const searchArray: {}[] = [
{ name: { $regex: `.*${search}.*`, $options: 'i' } },
];
companies.forEach(company => {
searchArray.push({
company: company.id,
});
});
const contracts = await this.companyContractModel
.find({
$or: searchArray,
})
.exec();
return contracts;
}
}
}