在使用关系数据库(SQL Server、MySQL、Oracle、Informix)28 年之后,我已转向 MongoDB。过去两周进展缓慢。我想提出几个问题来证实我的想法。
我的文档如下所示(忽略此问题的分组):
{
"_id": "xyz-800",
"site": "xyz",
"user": 800,
"timepoints": [
{"timepoint": 0, "a": 1500, "b": 700},
{"timepoint": 2, "a": 1000, "b": 200},
{"timepoint": 4, "a": 3500, "b": 1500}
],
"groupings": [
{"type": "MNO", "group": "<10%", "raw": "1"},
{"type": "IJK", "group": "Moderate", "raw": "23"}
]
}
我想展平时间点嵌套数组。以下方法有效,但是有没有一种方法可以对时间点中的属性进行通配符而不是列出每个属性?原因可能是,如果将新属性(例如“c”)添加到子文档中,那么我必须修改代码,或者如果该子文档有很多属性,我需要列出每个属性而不是使用通配符,如果可能的。
db.records.aggregate( {$unwind : "$timepoints"},
{$project: {_id: 1, site: 1, user: 1,
'timepoint': '$timepoints.timepoint',
'a': '$timepoints.a',
'b': '$timepoints.b'}})
Result:
{"id":"xyz-800", "site":"xyz", "user":800, "timepoint": 0, "a":1500, "b":700}
{"id":"xyz-800", "site":"xyz", "user":800, "timepoint": 2, "a":1000, "b":200}
{"id":"xyz-800", "site":"xyz", "user":800, "timepoint": 4, "a":3500, "b":1500}
我目前使用的是 MongoDB 3.2