OrientDB SQL - 如何从内联集合中展开多个属性
OrientDB SQL - How to unwind multiple attributes from an inline collection
假设有一个包含内联对象集合的文档,如下例所示:
{ "name": "Alice",
"children": [{ "name": "Bob", "age": 3 }, { "name": "Charlie", "age": 7 }]
}
我想为集合中的每个项目获取一行,并将每个内部属性作为一个单独的列,例如:
| name | childName | childAge |
| Alice | Bob | 3 |
| Alice | Charlie | 7 |
我尝试了以下查询,但它生成了笛卡尔积:
select name, children.name as childName, children.age as childAge
from Employee
unwind childName, childAge
我还设法使用 expand 和 flatten 函数提取了每个子项,但没有引用其父项。
我也想做同样的事情。
我能在 ODB 中找到的最接近的方法是将子项分成顶点,如这个问题所示:
我更愿意按照mongo的处理方式来做(不是我想要的,但是原则就在那里。):
失败的尝试:
- select name, children 来自 Test UNWIND children
result from query 1
- select value.name, value.age 来自 (select expand(children) from Test)
result from query 2
如果父级有一个 link 这将起作用,但是 value.$parent returns 为空。
您可以做的最简单的事情如下:
SELECT name, children.name as childName, children.age as childAge FROM (
SELECT name, children FROM Employee UNWIND children
)
假设有一个包含内联对象集合的文档,如下例所示:
{ "name": "Alice",
"children": [{ "name": "Bob", "age": 3 }, { "name": "Charlie", "age": 7 }]
}
我想为集合中的每个项目获取一行,并将每个内部属性作为一个单独的列,例如:
| name | childName | childAge |
| Alice | Bob | 3 |
| Alice | Charlie | 7 |
我尝试了以下查询,但它生成了笛卡尔积:
select name, children.name as childName, children.age as childAge
from Employee
unwind childName, childAge
我还设法使用 expand 和 flatten 函数提取了每个子项,但没有引用其父项。
我也想做同样的事情。
我能在 ODB 中找到的最接近的方法是将子项分成顶点,如这个问题所示:
我更愿意按照mongo的处理方式来做(不是我想要的,但是原则就在那里。):
失败的尝试:
- select name, children 来自 Test UNWIND children result from query 1
- select value.name, value.age 来自 (select expand(children) from Test) result from query 2 如果父级有一个 link 这将起作用,但是 value.$parent returns 为空。
您可以做的最简单的事情如下:
SELECT name, children.name as childName, children.age as childAge FROM (
SELECT name, children FROM Employee UNWIND children
)