2015-10-22 2 views
0

Хорошо, я исхожу из SQL-фона, и я просто загрязняю руки, используя MongoDB и Mongoose.Отношения в NoSql с использованием mongoDB и Mongoose

У меня есть две простые модели:

CAR:

let mongoose = require('mongoose'); 
let carsSchema = new mongoose.Schema({ 
    brand: String, 
    specfifications: [String], 
    image: String 

}); 
module.exports = mongoose.model('Car', carSchema); 

Driver

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); 

Из того, что я могу понять, это, кажется, правильный способ обработки взаимно -many-отношения, где один автомобиль может использоваться многими водителями.

Теперь мне нужно добавить класс под названием 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

ответ зависит

MongoDB или NoSQL теория говорит, что, если все связанные с ним данные в одном документе, то ваш запрос будет работать быстрее, так как они будут храниться вместе. Таким образом, в большинстве случаев мы предпочли бы одну модель для автомобилей и водителей.

Если вы не запрашиваете автомобиль и водителей вместе в большинстве своих запросов (вероятность того, что это будет редко), то то, что вы сделали, также верно ,

Кроме того, MongoDB имеет ограничение на размер документа, то есть 16 МБ, если вы считаете, что стоимость хранения их вместе может превышать 16 МБ, тогда то, что вы сделали, является правильным. Однако существует альтернативное решение, то есть GridFS, которое хранит документы в куски и преодолевает это ограничение.

+0

Хорошо, спасибо! Итак, комбинированная модель как для автомобиля, так и для водителя, которого вы говорите. Не могли бы вы включить и «thera» в эту модель? – RogerDore

+0

Если вы можете тогда «да», снова модели должны быть спроектированы так, как вы спрашиваете, например, если вы часто запрашиваете вещи вместе, и они вписываются в 16 МБ (что достаточно для большинства случаев) – prasun

Смежные вопросы