我正在尝试使用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:[]
}
]
}
]
});
答案 0 :(得分:0)
根据您的评论。
您可以忽略大小写来区分“小”和“小”。
UserModel.findOne({
email: {'$regex': "^"+ email +"$", $options:'i'}
}, function (err, data) {
callback(err, data)
});
但是您不能将S
与Small
匹配。
方法1:
您需要保留可能要考虑为Small
的单词。也许是通过在Variant Schema中插入这样的数组["S", "Small"]
来实现的。但是在这种情况下。您必须注意S
。 S
可以是任何东西。 (不建议您使用这种方法)
方法2:
我建议创建一个可以显示大小的模式(SizeSchema
)。例如Small, Large, Extra small, Extra Large etc...
并将SizeSchema
引用到VariantSchema
,将ProductSchema
引用到VariantSchema
。 (三重关系)。而这对于最终用户将是固定的。没有人会像“ S”这样的选项。
希望这对您有所帮助。