2012-02-27 68 views
3

哪种方法可以为文档,文档本身或单独的集合存储元数据?mongo存储文档元数据

我与具有这样的数据收集工作:

{ 
    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.尺寸限制的文件是16 MB,因此,如果您计划有很多metadat的更好地去分开收集。但是,我通常从嵌入开始,然后将数据迁移到单独收集,如果它变大的话。 2.如果你需要显示所有文件的某个地方的元数据(类似于网格),加载它,应用分页等是一件痛苦的事情。

+0

所以,如果我想(作为次要功能)使用元数据显示来自各种集合(即用户,供应商,客户)的元数据历史记录,您是否建议拥有日志收集和复制数据? – 2012-02-27 19:55:15

+0

我想如果你想要显示元数据历史记录,有一个单独的集合是有益的,但也保留最新的元数据嵌入在原始文档中。 – Barrie 2012-03-05 19:49:01