在文档本身中还是在单独的集合中,哪种方式是存储文档Meta数据的最佳方式?
我正在处理一个包含以下数据的集合:
{
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条答案
按热度按时间z6psavjg1#
我将Meta数据存储在文档中,原因如下:
1.如果您将文档及其元数据放在一起,它看起来会更自然。
1.当你加载文档时,你可以很容易地从文档中提取1 e0f1x元数据,以在不需要元数据时保持文档的简洁:
db.items.find({ },{ metadata:});
1.您可以使用
$slice
轻松地使用分页来检索元数据:db.items.find({},{metadata:{$slice:[20,10]}})//跳过20,最多10
但是,也要记住:
1.文件大小限制为16 MB。如果您计划拥有大量元数据,那么最好使用单独的集合。但我通常从嵌入数据开始,如果数据变得太大,然后将其迁移到一个单独的集合。
2 .如果您需要在某个地方显示所有文档中的元数据,比如在网格中,那么加载它、应用分页等操作可能会很麻烦。