Моя задача написать 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);
}