2016-07-20 4 views
4

Возьмем пример истории: история состоит из многих предложений, в моем случае история никогда не будет превышать 20 предложений. Лучше сделать схему для сюжета и другие один за Сентенции и, наконец, сделать в Story ссылку на предложения, которые составляют историю:В MongoDB лучше ли разграничивать Схемы или собирать их вместе?

var SentenceSchema = new mongoose.Schema({ 

    // Some other fields ... 

    sentence: { 
     type: String, 
     validate: validateSentence, 
     trim: true 
    } 

    // Some other fields ... 

});  

var StorySchema = new mongoose.Schema({ 

    // Some other fields ... 

    //Sentences of the Story 
    sentences: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Sentence' 
    }] 

    // Some other fields ... 

}); 

Или лучше поставить предложения непосредственно в истории :

var StorySchema = new mongoose.Schema({ 

    // Some other fields ... 

    //Sentences of the Story 
    sentences: [{ 

    // Some other fields ... 

    sentence: { 
     type: String, 
     validate: validateSentence, 
     trim: true 
    } 

    // Some other fields ... 

    }] 

    // Some other fields ... 

}); 

для истории 20 предложений (Макса), для того, чтобы получить всю историю, в первом случае мы должны сделать 20 соединяет ... Не настолько эффективно ... но во втором случае любит более расширяемый, например, если я хочу отображать только некоторые случайные предложения или обновлять предложение ...

В моем случае я не думаю, что предложения будут повторно использованы для других рассказов, а в рассказе написано предложение по предложению. Я имею в виду, когда написано предложение, это немедленно сохраняется в MongoDB.

Заранее благодарим за любые советы.

ответ

2

Будет ли предложение иметь смысл в изоляции? Не могли бы вы повторно использовать предложение более одного раза? Я думаю, маловероятно, чтобы предложение имело смысл без контекста истории, и очень маловероятно, что вы захотите повторного использования предложения.

Поэтому документ истории должен состоять из поддокументов предложения. То есть у вас будет одна коллекция (рассказы), и каждый рассказ будет содержать сборник поддокументов. Это будет вторая схема, которую вы указали.

+0

Это имеет смысл. Спасибо :-) И как @ profesor79 сказал, что поиск будет более эффективным. – Zagonine

-1

Приговоры в Истории, потому что Макс только 20 MongoDB является «joinless», и она должна быть использована в качестве «joinless»

Вы должны использовать несколько коллекций для одного до многих отношениях всякий раз, когда «многие» очень большой

2

imho до тех пор, пока размер историй будет соответствовать лимиту документа bson, вставьте их в основной документ.

Это ускорит процесс поиска, а также позволит обновлять ACID на уровне документа.

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

  • Нет связанных вопросов^_^