使用mongoDB和Mongoose的NoSql中的关系

时间:2015-10-22 07:27:26

标签: mongodb mongoose nosql

好的,即时通讯来自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?

1 个答案:

答案 0 :(得分:0)

答案取决于

MongoDB或NoSQL理论说如果所有相关数据都在一个文档中,那么您的查询将运行得更快,因为它们将被存储在一起。所以,在大多数情况下,我们更喜欢Car和Driver的单一模型

如果您在大多数查询中都没有查询汽车和司机(很少有机会),那么您所做的也是正确的。

此外,MongoDB对文档大小有限制,即如果您认为将它们存储在一起的成本超过16MB,那么您所做的是正确的16 MB。但是,还有一种替代解决方案,即GridFS,它将文档存储到块中并克服此限制