我在nestjs、typeorm、mongodb 中有一个应用程序。这些是版本
"@nestjs/common": "^8.0.0",
"@nestjs/typeorm": "^8.0.4",
"mongodb": "^4.6.0",
"typeorm": "^0.3.6"
我正在尝试通过这种方式实现mongo文档中的部分搜索,这是我完整的服务文件
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ILike, Like, MongoRepository, Raw, Repository } from 'typeorm';
import { City } from './city.entity';
@Injectable()
export class AppService {
constructor(
@InjectRepository(City)
private citiesRepository: MongoRepository<City>,
) {}
getSuggestions(query: string): Promise<City[]> {
console.log('in fun, query', query);
// return this.citiesRepository.findBy({
// name: Like(`%${query}%`)
// });
return this.citiesRepository.find({
where: {
// "name": { "$regex": ".*a.*"}
// name: Like(`%${query}%`)
// name: Like('a')
// name: new RegExp(`^${query}`)
// name: Raw(alias => `${alias} ILIKE '%${query}%'`),
// name: "Alma" <= this works
// name: new RegExp(query, 'i').toString()
// $or: [{ name: new RegExp(query, 'i').toString() }],
// name: {pattern: '.*a.*',options: ''}
// name: { $eq: "Alma" }
}
});
// not assignable to type 'string | FindOperator<string>'.ts(2322)
}
}
所有注释的解决方案都不起作用,我面临的错误是 “无法分配给类型 'string | FindOperator'.ts(2322)” 这是因为在实体中,名称是字符串类型,当然应该是,这是我的实体文件
import {Entity, ObjectID, ObjectIdColumn, Column} from "typeorm";
@Entity()
export class City {
@ObjectIdColumn()
_id: ObjectID;
@Column()
id: string;
@Column()
name: string;
我可以选择迁移到 mongoose,但我想坚持使用 typeorm,因为它适用于所有类型的数据库 我是 mongo 的初学者,可能这就是为什么我缺少一些基础知识的原因,但我之前在 typeorm 工作过并且有这方面的经验
有同样的问题,在互联网上找不到任何东西,所以我做了一个非常丑陋的解决方案。
const ugly: any = { $regex: /a/ }
return this.citiesRepository.find({
where: {
name: ugly
}
});
我做了一些测试,发现它与 mongoose 非常相似。
这对我有用
const ugly: any = { $regex: /a/ }
return this.citiesRepository.find({
where: {
name: {
$regex: new RegExp('a'),
$options: 'i',
},
});