gpt4 book ai didi

node.js - 弄清楚 MongoDB 数据库模型和引用

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:58 25 4
gpt4 key购买 nike

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

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

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

最佳答案

我会避免使用多个集合来建模这种情况,因为 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);

关于node.js - 弄清楚 MongoDB 数据库模型和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com