我正在设置redshift并从mongo导入数据。我已成功将json路径文件用于简单文档,但现在需要从包含数组的文档导入。
{
"id":123,
"things":[
{
"foo":321,
"bar":654
},
{
"foo":987,
"bar":567
}
]
}
如何将上述内容加载到如下表中:
select * from things;
id | foo | bar
--------+------+-------
123 | 321 | 654
123 | 987 | 567
还是有其他方式吗?
我不能将json数组存储在varchar(max)列中,因为Things的内容可能超过64K。
答案 0 :(得分:1)
鉴于
db.baz.insert({
"myid":123,
"things":[
{
"foo":321,
"bar":654
},
{
"foo":987,
"bar":567
}
]
});
以下内容将显示您想要的字段
db.baz.find({},{" things.foo":1," things.bar":1})
要展平结果集,请使用聚合
db.baz.aggregate(
{"$group": {"_id": "$myid", "things": { "$push" : {"foo":"$things.foo","bar":"$things.bar"}}}},
{
$project : {
_id:1,
foo : "$things.foo",
bar : "$things.bar"
}
},
{ "$unwind" : "$foo" },
{ "$unwind" : "$bar" }
);