我在MongoDB上为一个网站设计一个数据库,那里有很多活动。
每个活动都有基本的详细信息,例如title
,description
,reviews
等。
除此之外,每个活动每天都有不同的套餐和预订价格。因此,User
可以针对特定套餐为特定日期预订Event
。
我脑子里有很多解决方案,但不确定要去哪一个。 起初,我想出了以下[选项1]:
Event.schema({
title: String,
description: String,
reviews: [ { userId: mongoose.Types.ObjectId, comment: String, rating: Number } ],
prices: [ { packageName: String, date: Date, price: Number } ]
});
但是有一个问题。如果我想更改包名,我必须在所有数组元素中进行。
我试图通过这个做得更好:
Event.schema({
title: String,
description: String,
reviews: [ { userId: mongoose.Types.ObjectId, comment: String, rating: Number } ],
packages: [ String ],
prices: [ { packageId: Number, date: Date, price: Number } ]
});
此处,packageId
将是packages
数组中特定包名称的位置。这似乎也不对。我不知道为什么。 [让我知道这是一个不错的选择]
我能想到的第三个选项是将每个包的定价保存在单独的文档中:
Event.schema({
title: String,
description: String,
reviews: [ { userId: mongoose.Types.ObjectId, comment: String, rating: Number } ]
});
Package.schema({
eventId: { type: mongoose.Types.ObjectId, ref: 'Event' },
title: String,
pricing: [ { date: Date, price: Number } ]
});
或者不是将eventId
保留在Package
模型中,我应该在Package
模型中保留一组Event
个ID吗?
在所有选项中,哪一个是最佳解决方案?或者如何改进,请记住我还会在我的网站上添加Search by price
过滤器功能。所以我现在必须非常小心地决定架构。
答案 0 :(得分:1)
我认为你的第一个选择是好的,除非你想经常更改包名(可能不是这种情况)。
这是最佳选择的主要原因是因为您希望按价格搜索事件。将所有信息放在单个文档中将更有效。
中找到更多信息