TypeOrm,MongoDB全文搜索并评分

fcipmucu  于 2023-01-08  发布在  Go
关注(0)|答案(1)|浏览(115)

守则:

repository.find({
  where: { $text: { $search: 'strin' }, score: { $meta: 'textScore' } },
  take: 10,
});

向我显示错误:第一个月
根据Other Stackoverflows的说法,你必须写这样的东西:

repository.find(
  { $text : { $search : "text to look for" } }, 
  { score : { $meta: "textScore" } }
)

但这不起作用,因为find只接受一个where参数,而不接受2个参数。
以下是类型:

  • find(options?: MongoFindManyOptions<Entity>): Promise<Entity[]>;
  • FindMany通过跳过和获取扩展FindOne
  • where?: ObjectLiteral;

所以是的,基本上我没有什么可以做的,我尝试的东西都不管用,如果我去做一个数组,它会抱怨它不是一个对象,所以我不能复制其他stackoverflows所建议的

vfh0ocws

vfh0ocws1#

https://github.com/typeorm/typeorm/blob/e49d0c8740b9dec45448131edc012a920e6fcea2/src/entity-manager/MongoEntityManager.ts#L1038 says:

// todo: implement

如果我得到了它,问题是没有文本得分Map到哪里。options?: MongoFindManyOptions的投影部分允许您选择要用数据填充模型的哪些属性,但仅此而已:

return selects.reduce((projectCriteria, key) => {
            projectCriteria[key] = 1
            return projectCriteria
        }, {} as any)

1是硬编码的,因此无法使用计算值{ $meta: "textScore" }投影新字段score

相关问题