【问题标题】:Figuring out MongoDB database Model and References找出 MongoDB 数据库模型和参考
【发布时间】:2015-11-17 01:06:06
【问题描述】:

我正在尝试找出我将在我的 NodeJS 应用程序中使用的 MongoDB 模型的理想设计。该应用程序的设置类似于调查,某些步骤会根据之前的选择提供选项。以下是选择和可能性的示例。

1 级:图案类型:纯色、条纹、格子 2 级(无论 1 级选择如何,选项都相同): 颜色:灰色、蓝色、绿色、红色 结果:图像根据级别 1 和级别 2 选择显示。

基于此结构,数据库的唯一元素是基于两个选择级别显示的图像。基于这个想法,我应该创建多少个集合,以及将级别 1、级别 2、结果之间的引用联系在一起以显示正确图像的最佳主键是什么?

【问题讨论】:

    标签: node.js mongodb mongoose nosql


    【解决方案1】:

    我会避免使用多个集合来建模这种情况,因为 MongoDB 不支持连接,并且正如您所说,您希望将级别 1 和级别 2 之间的引用联系在一起。听起来代表一个图像的文档会相当小,而且很简单 - 如果图像可能具有多种颜色,则可能不适合在一个文档中对图像进行建模。所以我会去收集一个集合,每个文档建模一个图像。

    听起来您的图像有两个属性,颜色和图案。

    如果每个图像只有 1 种颜色和 1 种图案,那么一个简单的模式是:

    {
        _id: ObjectId('...'),
        name: "image1",
        color: "green",
        pattern: "solid"
    }
    

    允许每个图像具有多种颜色和图案的架构是:

    {
        _id: ObjectId('...'),
        name: "image1",
        color: ["green", "red"],
        pattern: ["plaid", "solid"]
    }
    

    您可以使用如下查询查询上述任一模式:

    db.images.find({ pattern:"solid", color: "green" });
    

    使用 Mongoose(用于 Node 的 MongoDB 对象建模库),第一个模式将如下所示。请注意在应用程序代码中使用enum 将这些字段限制为有效值。

    var imageSchema = new mongoose.Schema({
        color: { type: String, enum: ['grey', 'blue', 'green', 'red'] },
        pattern: { type: String, enum: ['solid', 'stripe', 'plaid'] },
        name: String,
    });
    var Image = mongoose.model('image', imageSchema, 'images');
    
    Image.find({ pattern:"solid", color: "green" }).exec(callback);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-25
      • 2012-03-11
      • 1970-01-01
      • 2021-01-06
      • 2011-06-14
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多