2012-02-27 3 views
3

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

Я работаю с коллекцией, которая имеет данные, как это:

{ 
    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.It будет выглядит более естественно, если вы сохраняете документ и метаданные вместе.

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

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

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

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

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

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

+0

Так что, если бы я хотел (как второстепенную функцию) отобразить историю метаданных из разных коллекций (например, Пользователи, Поставщики, Клиенты), используя метаданные, вы бы порекомендовали иметь коллекцию журналов и дублировать данные? –

+0

Я думаю, что если вы хотите отобразить историю метаданных, было бы полезно иметь отдельную коллекцию, но также сохранить самые последние метаданные, встроенные в исходный документ. – Barrie