Mongo存储文档元数据

3

在文档中存储元数据和在独立的集合中存储元数据,哪种方法更好?

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

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

我需要记录每次更改的时间和执行人,但我不确定是将元数据添加到每个元素中还是创建一个类似于日志的集合。

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

2
我会将元数据与文档一起存储,原因如下:
1.如果您将文档和元数据放在一起,它看起来更自然。
2.当您加载文档时,您可以轻松地从文档中排除元数据,以使您的文档在不需要元数据时更加轻便。
db.items.find( { }, { metadata : 0 } );

3. 你可以通过分片轻松使用分页来检索元数据:

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

但是,请记住:

1.文档的大小限制为16 MB,因此如果您计划拥有大量元数据,则最好使用单独的集合。但我通常从嵌入开始,如果数据变得很大,则迁移到单独的集合。 2.如果您需要在某个地方显示所有文档的元数据(类似于网格),则加载它、应用分页等可能会很麻烦。


如果我想(作为一个次要功能)显示来自各种集合(例如用户、供应商、客户)的元数据历史记录,您是否建议创建一个日志集合并复制数据? - undefined
我认为,如果您想显示元数据历史记录,将其放在一个单独的集合中会有益处,但同时也要将最近的元数据嵌入到原始文档中。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接