mongodb存储文档元数据

时间:2012-02-27 04:09:18

标签: mongodb

哪种方法可以在文档本身或单独的集合中存储元数据的最佳方式?

我正在处理一个包含以下数据的集合:

{
   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 个答案:

答案 0 :(得分:1)

我会将元数据存储到文档中,原因如下:

1.如果将文档和元数据放在一起,它看起来会更自然。

2.当您加载文档时,您可以从文档中轻松获取exclude元数据,以便在不需要元数据时保持文档清晰:

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

3.您可以通过切片轻松使用分页到retrieve元数据:

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

但是,请记住:

1.文档的大小限制为16 MB,因此如果您计划更好地使用大量元数据,请单独收集。但是我通常从嵌入开始,然后将数据迁移到单独的集合中,如果它变大的话。 2.如果你需要显示所有文档的某些元数据(类似于网格),加载它,应用分页等都会很痛苦。