首页 > 解决方案 > 具有不同变体架构的产品

问题描述

我正在尝试使用 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:[]
            }
        ]
    }
]
});

标签: mongodbmongoosedatabase-designnosqlschema

解决方案


根据您的评论。

您可以通过忽略大小写来区分“小”和“小”。

UserModel.findOne({
    email: {'$regex': "^"+ email +"$", $options:'i'}
}, function (err, data) {
    callback(err, data)
});

但是你不能S与之匹配Small

方法一:

您需要维护您想要考虑的可能单词Small。也许通过在 Variant Schema 中插入这样的数组["S", "Small"]。但在这种情况下。你必须要小心SS可以是任何东西。(我不推荐这种方法)

方法二:

我想建议制作一个SizeSchema可以呈现大小的模式 ( )。例如Small, Large, Extra small, Extra Large etc...并将其引用SizeSchemaVariantSchemaProductSchemaVariantSchema。(三重关系)。这将为最终用户修复。没有人会拥有像“S”这样的选项。

希望这可以帮助你。


推荐阅读