哪种方法可以在文档本身或单独的集合中存储元数据的最佳方式?
我正在处理一个包含以下数据的集合:
{
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
}
答案 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.如果你需要显示所有文档的某些元数据(类似于网格),加载它,应用分页等都会很痛苦。