MongoDB 合并集合或有多个引用
MongoDB combine collections or have multiple references
我有一组类别可供用户选择(电影、音乐、书籍等),并对所选类别中的项目进行评分。
因为每个类别都有不同的参数(movies
有 year
,music
有 artist
,等等)我想把每个类别分成它自己的集合,但是,这带来了必须在评级集合中引用正确文档的问题(选项 1)。
将所有类别分开并在评级集合中有一堆参考会更聪明吗?或者将所有类别组合成一个集合,其中每个文档的大部分参数都是空白的(选项 2)?
编辑:我想另一种选择是让每个类别都有自己的评级集合(即 MovieRatings
),但这会有点混乱...
选项 1:
项目:
Movies = {
title: String,
year: Number,
imageUrl: String
}
Music = {
title: String,
artist: String,
imageUrl: String
}
评分:
Ratings = {
user: ObjectId,
movie: { type: Schema.Types.ObjectId, ref: 'Movies' },
music: { type: Schema.Types.ObjectId, ref: 'Music' },
...
rating: Number
}
选项 2:
项目:
Items = {
title: String,
artist: String,
year: Number,
imageUrl: String
}
评分:
Ratings = {
user: ObjectId,
item: { type: Schema.Types.ObjectId, ref: 'Items' },
rating: Number
...
}
我可以都不建议吗? :) 您可能仍在考虑如何在 RDBMS 中对这个问题建模,但是 MongoDB 是完全不同的动物。您希望尽可能避免引用,您可以在本示例中这样做。
在您的 users
集合中,您可以有一个 ratings
数组,每个 rating
应该描述电影或音乐项目是否被评级,以及评分本身.
像这样会给你更好的表现:
{"_id": "sherlock@holmes.net",
"ratings": [{
"type": "movie",
"title": String,
"year": Number,
"imageUrl": String,
"rating": Number
}, {
"type": "music",
"title": String,
"artist": String,
"imageUrl": String,
"rating": Number
}]
}
请注意,根据您希望查询或生成此数据的方式,您可能会受益于 其他 模式。这只是一个示例,可帮助您习惯以非规范化的方式思考 — MongoDB 希望您存储数据的方式。
我有一组类别可供用户选择(电影、音乐、书籍等),并对所选类别中的项目进行评分。
因为每个类别都有不同的参数(movies
有 year
,music
有 artist
,等等)我想把每个类别分成它自己的集合,但是,这带来了必须在评级集合中引用正确文档的问题(选项 1)。
将所有类别分开并在评级集合中有一堆参考会更聪明吗?或者将所有类别组合成一个集合,其中每个文档的大部分参数都是空白的(选项 2)?
编辑:我想另一种选择是让每个类别都有自己的评级集合(即 MovieRatings
),但这会有点混乱...
选项 1:
项目:
Movies = {
title: String,
year: Number,
imageUrl: String
}
Music = {
title: String,
artist: String,
imageUrl: String
}
评分:
Ratings = {
user: ObjectId,
movie: { type: Schema.Types.ObjectId, ref: 'Movies' },
music: { type: Schema.Types.ObjectId, ref: 'Music' },
...
rating: Number
}
选项 2:
项目:
Items = {
title: String,
artist: String,
year: Number,
imageUrl: String
}
评分:
Ratings = {
user: ObjectId,
item: { type: Schema.Types.ObjectId, ref: 'Items' },
rating: Number
...
}
我可以都不建议吗? :) 您可能仍在考虑如何在 RDBMS 中对这个问题建模,但是 MongoDB 是完全不同的动物。您希望尽可能避免引用,您可以在本示例中这样做。
在您的 users
集合中,您可以有一个 ratings
数组,每个 rating
应该描述电影或音乐项目是否被评级,以及评分本身.
像这样会给你更好的表现:
{"_id": "sherlock@holmes.net",
"ratings": [{
"type": "movie",
"title": String,
"year": Number,
"imageUrl": String,
"rating": Number
}, {
"type": "music",
"title": String,
"artist": String,
"imageUrl": String,
"rating": Number
}]
}
请注意,根据您希望查询或生成此数据的方式,您可能会受益于 其他 模式。这只是一个示例,可帮助您习惯以非规范化的方式思考 — MongoDB 希望您存储数据的方式。