我是Mongo的新朋友。请帮助确定数据结构。我有分支,每个分支都有名称和屏幕计数,每个分支可以有许多播放列表,每个播放列表都有名称,startDate,endDate,totalTime和Files。我需要对每个文件在什么屏幕上说应该按什么顺序显示时间。我想在具有不同属性的不同播放列表中使用文件
const FileSchema = Schema({
url: {
type: String,
required: true
},
showTime: {
type: Date,
required: true
},
screen: {
type: Number,
required: true
},
order: {
type: Number,
required: true
},
}, {
timestamps: true
});
const PlaylistSchema = Schema({
name: {
type: String,
required: true
},
endDate: {
type: Date,
required: true
},
files: [FileSchema]
}, {
timestamps: true
});
const BranchSchema = Schema({
name: {
type: String,
required: true
},
screens: {
type: Number,
required: true
},
playlists: [Playlists]
}, {
timestamps: true
});
答案 0 :(得分:1)
处理多层多对多关系始终令人头疼。 设计诸如关系数据库之类的东西并使用查找来管理所有事物是一个好主意。
,如果我们从集合playlists
和files
中删除一组ID并添加对子节点的引用,则会更有意义。
在两种情况下,我们都必须查找详细信息。但是advantag会提高阅读性能,因此我们在单个集合对象中存储的数据更少。根对象中的更多数据将减慢查询响应。
const FileSchema = Schema({
playlistId: Schema.Types.ObjectId,
url: {
type: String,
required: true
},
showTime: {
type: Date,
required: true
},
screen: {
type: Number,
required: true
},
order: {
type: Number,
required: true
},
}, {
timestamps: true
});
const PlaylistSchema = Schema({
branchId: Schema.Types.ObjectId,
name: {
type: String,
required: true
},
endDate: {
type: Date,
required: true
}
}, {
timestamps: true
});
const BranchSchema = Schema({
name: {
type: String,
required: true
},
screens: {
type: Number,
required: true
},
}, {
timestamps: true
});
如果您不希望有太多集合,并且您的PlaylistSchema
不包含太多属性,则可以将其设为BranchSchema
中的对象数组,并使用其_id字段来管理{{1} }。
FileSchema