#typescript #mongodb #mongoose #mongodb-query #nestjs
#typescript #mongodb #mongoose #mongodb-query #nestjs
Вопрос:
Этот вопрос может показаться глупым, но для новичка это может сбить с толку людей начального уровня, которые используют MongoDB.
Это схемы, которые я определил
Бренд.схема.ts
@Schema() export class Brand{ @Transform(({value}) =gt; value.toString()) _id: ObjectId @Prop() brand: string; } const BrandSchema = SchemaFactory.createForClass(Brand) BrandSchema.index({brand: 'text'});
Категория.схема.ts
export type CategoryDocument = Category amp; Document; @Schema() export class Category{ @Transform(({value}) =gt; value.toString()) _id: ObjectId @Prop() category: string; @Prop({ type: mongoose.Schema.Types.ObjectId, ref: Brand.name }) @Type(() =gt; Brand) brandType: Brand; } const CategorySchema = SchemaFactory.createForClass(Category) CategorySchema.index({category: 'text'})
ProductSchema.ts
@Schema() export class ProductType{ @Transform(({value}) =gt; value.toString()) _id: ObjectId @Prop() product: string; @Prop({ type: mongoose.Schema.Types.ObjectId, ref: Category.name }) @Type(() =gt; Category) categoryType: Category; }
Моя цель состоит в том, чтобы создать продукты API таким образом, чтобы при поиске идентификатора бренда отображались все связанные продукты с отфильтрованным идентификатором бренда.
http://localhost:3000/product?марка=61adc5b60fb6eef06c6b017f
До сих пор мне удавалось получить ответ ниже, но если вы внимательно обратите внимание, что фильтр brandId работает только с документом категории. Другие продукты все еще заполняются, которые мне не нужны. Я уверен, что нам нужно немного подправить в find (), чтобы заполнить только тот документ, в котором указан брендИД. (PS Я не хочу, чтобы тип категории: null даже отображался в моем ответе).
Below is the code snippet that Ive been working on
var result = this.productTypeModel.find({path: 'categoryType', match: {'categoryType.brandType': brandId}, $match: { categoryType: ObjectID(brandId), active: 'categoryType.brandType.active', applications:{$exists:true,$ne:[]} } }) .populate({path: 'categoryType', match: {brandType: brandId}, select:['brandType', 'category']}) .where({"categoryType": {$ne: null}})
[ { "_id": "61adc3fb0fb6eef06c6b0161", "categoryType": null, "product": "Product One", "__v": 0 }, { "_id": "61adc5d90fb6eef06c6b0183", "categoryType": { "_id": "61adc5ce0fb6eef06c6b0181", "brandType": "61adc5b60fb6eef06c6b017f", "category": "Category Two" }, "product": "Product Two", "__v": 0 }, { "_id": "61add3bc24e62e5bf5b09a73", "categoryType": null, "product": "Product Three", "__v": 0 }, { "_id": "61adeec4e84b8695512def6e", "categoryType": null, "product": "Look Three", "__v": 0 }, { "_id": "61ae54f6550528f3ae470cc2", "categoryType": null, "product": "Look Three", "__v": 0 } ]