Что является лучшим способом для моделирования по модели Mongodb - PullRequest
0 голосов
/ 12 января 2019

У меня есть 2 модели, подобные этой

const testRunSchema = new mongoose.Schema({
    testTimeSlot: {
        type: String,
        required: true
    },
    testDate: {
        type: String,
        required: true
    },
    diagnosticData: [Object],
    notes: String,
    active: {
        type: Boolean,
        default: true
    }
}, {
    timestamps: true,
    strict: false
})

const testingSchema = new mongoose.Schema({
    testId: {
        type: mongoose.Schema.ObjectId,
        required: true
    },

    testDetails: {
        //dummy data
    },
    contactDetails: {
        //dummy data
    },
    testRunDetails: [testRunSchema], //is this a best way?
    runByAssistant: Boolean
}, {
    timestamps: true
});

module.exports = mongoose.model('Testing', testingSchema)

Теперь я хочу получить доступ к testTimeSlot (это первая модель), используя testId второй модели.

Мое решение:

Я могу получить доступ к testimeSlot первой модели, используя testId, потому что данные первой модели доступны в testRunDetails второй модели.

Проблема с этим решением:

Поскольку testRunSchema определяется как массив во второй модели, получить доступ к testTimeSlot каждого элемента массива непросто и эффективно.

Как лучше всего решить эту проблему?

1 Ответ

0 голосов
/ 12 января 2019

что вы считаете правильным, получить к ним доступ непросто, кроме того, чем больше массив заполнен, тем медленнее будет запрос. Поэтому было бы лучше, если бы вы разделили testRunSchema и сохранили ссылку на его данные в testingSchema

const testingSchema = new mongoose.Schema({
    testId: {
        type: mongoose.Schema.ObjectId,
        required: true
    },

    testDetails: {
        //dummy data
    },
    contactDetails: {
        //dummy data
    },
    testRunDetails:{
          type:[Schema.Types.ObjectId], ref:'testRunSchema'
    },//like this in here the object id of testRunSchema 

    runByAssistant: Boolean
}, {
    timestamps: true
});

когда вы хотите сделать запрос, вам просто нужно использовать polulate () в mongoose Вы можете прочитать это в здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...