mongodb - 具有不同变体架构的产品
问题描述
我正在尝试使用 MongoDB 创建一个电子商务网站。我已经创建了一个产品和变体模型,我的问题是如何搜索具有变体的产品,例如“尺寸”用户可以将变体值添加为“S”或“小”。在这种情况下,我如何搜索具有例如小产品的产品,因为产品有很多变体,我如何列出例如。所有小尺寸的产品。这是我的变体模型。
var variantSchema = Schema({
name: {
type: String,
required: true,
unique: true
},
count: {type: Number, default : 0}
});
我的产品架构是:
var productSchema = Schema({
sku: {
type: String,
lowercase: true
}, //, required: true, unique: true
name: {
type: String,
lowercase: true,
max: 65,
required: true
},
slug: {
type: String,
lowercase: true,
unique: true,
index: true,
slug: "name",
slug_padding_size: 3
},
status: Boolean,
listPrice: Number,
description: {
short: {
type: String,
trim: true,
lowercase: true
},
long: {
type: String,
trim: true,
lowercase: true
}
},
images: [],
categoryId: {
type: Schema.Types.ObjectId,
ref: 'Category'
},
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
createdAt: {
type: Date,
default: Date.now
},
updatedAt: {
type: Date,
default: Date.now
},
isActive: Boolean,
vars: [
{
varId : {
type: Schema.Types.ObjectId,
ref: 'Variants'
},
values: [
{
value : String,
image:[]
}
]
}
]
});
解决方案
根据您的评论。
您可以通过忽略大小写来区分“小”和“小”。
UserModel.findOne({
email: {'$regex': "^"+ email +"$", $options:'i'}
}, function (err, data) {
callback(err, data)
});
但是你不能S
与之匹配Small
。
方法一:
您需要维护您想要考虑的可能单词Small
。也许通过在 Variant Schema 中插入这样的数组["S", "Small"]
。但在这种情况下。你必须要小心S
。S
可以是任何东西。(我不推荐这种方法)
方法二:
我想建议制作一个SizeSchema
可以呈现大小的模式 ( )。例如Small, Large, Extra small, Extra Large etc...
并将其引用SizeSchema
到VariantSchema
和ProductSchema
到VariantSchema
。(三重关系)。这将为最终用户修复。没有人会拥有像“S”这样的选项。
希望这可以帮助你。