【问题标题】:Products with different variants schema具有不同变体架构的产品
【发布时间】:2018-12-24 00:35:04
【问题描述】:

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

【问题讨论】:

  • 你能在这里转储一些数据吗?一个来自 Product 一个来自 Variant?
  • @HardikShah varianSchema 仅包含名称,例如:尺寸、颜色等,并且在产品变量中包含变量 ID 和值,例如:varId:123 和值是用户添加的任何内容,他可以输入“S”或“小的”。我的问题是我怎么知道“S”和“Small”是一样的。提前致谢

标签: mongodb mongoose database-design nosql schema


【解决方案1】:

根据您的评论。

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

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

但您不能将SSmall 匹配。

方法一:

您需要将可能的单词保留为Small。也许通过在 Variant Schema 中插入一个数组 ["S", "Small"] 像这样。但在这种情况下。您必须注意SS 可以是任何东西。 (我不推荐这种方法)

方法2:

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多