TypeORM使用MongoDB带score全文搜索时遭遇$meta未知操作符错误求助
解决TypeORM中MongoDB全文搜索返回评分(score)的问题
问题分析
你遇到的MongoError: unknown operator: $meta错误,是因为错误地将MongoDB的**投影(Projection)**条件放到了TypeORM的where查询条件中。原生MongoDB的全文搜索需要两个参数:第一个是查询条件,第二个是投影规则(用来返回textScore),但TypeORM的find方法将这两个参数整合到了MongoFindManyOptions对象中,对应的属性分别是where和projection。
正确实现代码
使用TypeORM的projection属性来指定返回textScore,同时可以通过order按评分排序:
const results = await repository.find({ where: { $text: { $search: 'strin' } }, // 指定返回score字段,通过$meta获取文本评分 projection: { score: { $meta: 'textScore' } }, take: 10, // 可选:按评分从高到低排序 order: { score: { $meta: 'textScore' } } });
补充说明
- 如果你的Entity类中没有定义
score属性,TypeORM返回的结果对象会自动包含该字段,你可以通过类型断言来处理:type EntityWithScore = YourEntity & { score: number }; const results: EntityWithScore[] = await repository.find(...); - 确保你的MongoDB集合已经创建了全文索引,否则
$text查询会报错。可以通过TypeORM的实体装饰器创建索引:@Entity() @Index({ fulltext: true }) export class YourEntity { @Column() content: string; // 其他字段... }
内容的提问来源于stack exchange,提问作者Branchverse
相关产品推荐
相关产品推荐

