Моно магазин метаданных документа - PullRequest
2 голосов
/ 27 февраля 2012

Каков наилучший способ хранения метаданных для документа, в самом документе или в отдельной коллекции?

Я работаю с коллекцией, в которой есть такие данные:

{
   status: {
       joined: Date,
       retired: [{
           on: Date,
           comment: String,
           reinstated: {
               on: Date,
               comment: String
           }
       }],
       suspended: [{
           on: Date,
           comment: String,
           reinstated: {
               on: Date,
               comment: String
           }
       }],
       //.....

Мне нужно вести журнал того, когда и кто выполняет эти изменения, но я не уверен, должен ли я добавлять метаданные к каждому элементу или иметь коллекцию, такую ​​как Log.

// Log collection
{
    by: UserId,
    on: Date,
    verb: String,
    object: ObjectId,
    comment: String
}

1 Ответ

1 голос
/ 27 февраля 2012

Я буду хранить метаданные с документом по нескольким причинам:

1. Это будет выглядеть более естественно, если вы храните документ и метаданные вместе.

2. При загрузке документа вы можете легко исключить метаданные из документа, чтобы ваши документы были легкими, когда метаданные не нужны:

db.items.find( { }, { metadata : 0 } );

3.Вы можете легко использовать подкачку для извлечения метаданных через слайс:

db.items.find({}, {metadata:{$slice: [20, 10]}}) // skip 20, limit 10

Но имейте в виду:

1. Предельный размер документа составляет 16 МБ, поэтому, если вы планируете использовать много метаданных, лучше использовать отдельную коллекцию.Но я обычно начинаю с встраивания, а затем переношу данные в отдельный сбор, если он станет большим.2.Если вам нужно где-то показать метаданные для всех ваших документов (что-то вроде сетки), может быть сложно загрузить их, применить подкачку и т. Д.

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