Как избежать нулевых значений в ответе mongodb?

#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  } ]