Задать вопрос
@Yarilo-Vitaly

Как использовать функцию createIndexes() из mongoose для написания метод поиска по текстовому совпадению?

Моя задача написать API в которой будет метод поиска по текстовому совпадению,
по всей базе данных, включая вложенные объекты . И для этого мне нужен index.
Когда я работал с typegoose, я использовал декоратор index. Но в mongoose такого декоратора нет,
поэтому я использую функцию createIndexes() которая принимает опции из CreateIndexesOptions.
Самая оптимальная опция, как я думаю fieldsAsRaw. Но в результате я получаю пустой массив.
@Schema()
export class TopPageModel {

 @Prop({ enum: TopLevelCategory })
  firstCategory: TopLevelCategory;

  @Prop({ required: true })
  secondCategory: string;

  @Prop({ required: true, unique: true })
  alias: string;

  @Prop({text: true})
  title: string;

  @Prop({ required: true })
  category: string;

  @Prop(HhData)
  hh?: HhData;

  @Prop([TopPageAdvantages] )
  advantages: [TopPageAdvantages];

  @Prop({ text: true})
  seoText: string;

  @Prop({ required: true })
  tagsTitle: string;

  @Prop([String])
  tags: [string];
}

export const TopPageSchemaFactory = SchemaFactory.createForClass(TopPageModel);


                                     TopPageService

    async findByText(text: string) {
        const index =  this.topPageModel.createIndexes(
            {fieldsAsRaw:{title:text, seoText:text }}
      )
      if(!index){
        console.log("Error")
      } 
      const search = this.topPageModel.find({index});
      return search;  
 }


                                  TopPageController
  @Get('textSeatch/:text')
  async findByText(@Param('text') text: string) {
    return this.topPageService.findByText(text);
  }
  • Вопрос задан
  • 23 просмотра
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы