背景
我将表行存储为 MongoDb 文档,每列都有一个名称。假设 table 有这些感兴趣的列:Identifier
, Person
, Date
, Count
。MongoDb 文档还有一些与表数据分开的额外字段,由timestamp
. 列不是固定的(这就是为什么我首先使用无模式数据库来存储它们)。
将需要执行各种复杂但迄今为止未指定的查询。我不是很关心性能,尽管查询性能可能会成为瓶颈。一旦插入,文档将不会被修改(Identifier
将创建一个相同的新文档),并且插入不是很频繁(比如说,每天 1000 个新的 MongoDb 文档)。因此,随着时间的推移,数据量将稳步增长。
例子
直接的方法是收集 MongoDb 文档,例如:
{
_id: XXXX,
insertDate: ISODate("2012-10-15T21:26:17Z"),
flag: true,
data: {
Identifier: "AB002",
Person: "John002",
Date: ISODate("2013-11-16T21:26:17Z"),
Count: 1
}
}
现在我看到了另一种方法(例如在这个问题的接受答案中),使用每个对象有两个字段的数组:
{
_id: XXXX,
insertDate: ISODate("2012-10-15T21:26:17Z"),
flag: true,
data: [
{ field: "Identifier", value: "AB002" },
{ field: "Person", value: "John001" },
{ field: "Date", value: ISODate("2013-11-16T21:26:17Z") },
{ field: "Count", value: 1 }
]
}
问题
第二种方法是否有任何意义?
如果是,那么如何选择使用哪个?特别是,是否有一些特定类型的查询使用一种方法很容易/便宜,而另一种方法很难/昂贵?有什么“经验法则”,或者两者的赞成名单?一种方法不方便的真实案例将特别有价值。