嵌套在Product
文档中的Label
文档。
现在,我试图找到所有的文件,其中标签有一些名称,但不是数组的对象,这个数组是空的。
我使用什么来获取文档
return this.productModel.find({
'label.name': 'Something',
});
LabelSchema.ts
@Schema({ versionKey: false, timestamps: true })
export class Label extends Document {
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true })
user: User;
@Prop({ type: String, required: true })
name: string;
@Prop({ type: String, default: null })
email: string | null;
@Prop({ type: String, default: null })
description: string;
@Prop({ type: SocialSchema, default: new Social() })
socials: Social;
@Prop({ type: String, enum: LabelStatus, default: LabelStatus.Draft })
status: string;
// TODO add FILE document
@Prop({ type: String, default: null })
avatar: any;
// TODO add FILE document
@Prop({ type: String, default: null })
header: any;
@Prop({
type: Number,
default: process.env.APP_DEFAULT_COMMISSION_RATE,
})
commissionRate: number;
@Prop({ type: Number, default: 0 })
earnings: number;
@Prop({ type: String, required: true })
slug: string;
@Prop({ type: Date, required: true })
createdAt: Date;
@Prop({ type: Date, required: true })
updatedAt: Date;
}
ProductSchema.ts
@Schema({
versionKey: false,
timestamps: true,
})
export class Product extends Document {
@Prop({ type: String, required: true })
name: string;
@Prop({ type: String, enum: ProductStatus, default: ProductStatus.Draft })
status: string;
@Prop({
type: mongoose.Schema.Types.ObjectId,
ref: Label.name,
autopopulate: true,
})
label: Label;
@Prop({ type: String, default: '' })
shortDescription: string;
@Prop({ type: String, default: '' })
description: string;
@Prop({ type: Number, default: null })
price: number | null;
@Prop({ type: Number, default: null })
salePrice: number | null;
@Prop({ type: Boolean, default: false })
isFree: boolean;
//TODO add FILE document
artwork: any;
//TODO add FILE document
audioPreview: any;
@Prop([
{
type: mongoose.Schema.Types.ObjectId,
ref: Category.name,
autopopulate: true,
},
])
category: Category[];
@Prop({ type: Boolean, default: false })
featured: false;
@Prop({ type: String, required: true })
slug: string;
@Prop({ type: Date, required: true })
createdAt: Date;
@Prop({ type: Date, required: true })
updatedAt: Date;
}
1条答案
按热度按时间nzkunb0c1#
这是因为您的标签在产品模型上是
ObjectId
,所以您只能按ObjectId
查询它。有几种方法可以解决这个问题。最理想的方法是直接按ObjectId
查找,而不是按名称查找(例如,如果这是来自客户端的,并且他们正在选择标签,则让客户端发送标签ID,而不是标签名称)。如果这是不可能的,我建议首先查找标签。