好的,即时通讯来自SQL背景,我只是用MongoDB和Mongoose弄脏了。
我有两个简单的模型:
CAR
let mongoose = require('mongoose');
let carsSchema = new mongoose.Schema({
brand: String,
specfifications: [String],
image: String
});
module.exports = mongoose.model('Car', carSchema);
驱动程序
let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let driverSchema = new mongoose.Schema({
name: String,
cars: [{ type: Schema.Types.ObjectId, ref: 'Car' }]
});
module.exports = mongoose.model('Driver', driverSchema);
据我所知,这似乎是一种处理一对多关系的正确方法,其中一辆车可供许多司机使用。
现在我需要添加一个名为Races
的类,它将用于保存特定汽车中的空间驱动程序的结果。
在SQL中思考我会做这样的事情:
let mongoose = require('mongoose');
let raceSchema = new mongoose.Schema({
totaltime: String,
laptime: String,
driver: { type: Schema.Types.ObjectId, ref: 'Driver' },
car: { type: Schema.Types.ObjectId, ref: 'Car' }
});
module.exports = mongoose.model('Race', raceSchema);
你会认为这是在NoSql中纠正方法还是我强迫我的SQL思维方式进入NoSQL?
答案 0 :(得分:0)
答案取决于
MongoDB或NoSQL理论说如果所有相关数据都在一个文档中,那么您的查询将运行得更快,因为它们将被存储在一起。所以,在大多数情况下,我们更喜欢Car和Driver的单一模型
如果您在大多数查询中都没有查询汽车和司机(很少有机会),那么您所做的也是正确的。
此外,MongoDB对文档大小有限制,即如果您认为将它们存储在一起的成本超过16MB,那么您所做的是正确的16 MB。但是,还有一种替代解决方案,即GridFS,它将文档存储到块中并克服此限制