OrientDb中的常见顶点到两个关系

时间:2014-03-11 20:41:42

标签: graph-databases orientdb

我正在尝试选择OrientDb并尝试一些测试查询,以了解使用图形数据库的语法和功能。特别是我很难找到一个满足两个独立关系的公共顶点到另外两个不相关的顶点。

例如,

假设我有一个具有属性名称的人物顶点,具有模型的汽车顶点和具有属性zip的位置顶点具有以下边缘依赖性

人---拥有 - >汽车

人---生活 - >位置

我正在尝试找到拥有特定型号汽车并以特定拉链生活的所有人物顶点。

我不确定我在努力中究竟缺少什么,但我们将非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:4)

让我们假设这个域模型:

Car <--- Owns ---|   Person   |--- Lives ---> Location
*   <--- Owns ---|1          *|--- Lives ---> 1

所有拥有特定车型的人:

select expand(in('Owns')) from Car where model = 'Volvo'

所有住在特定邮编的人:

select expand(in('Lives')) from Location where zip = '10770'

让我们结合上述内容,让所有拥有特定车型并以特定邮编方式生活的人:

select from (
    select expand(in('Owns')) from Car where model = 'Volvo'
) where out('Lives') contains (zip='10770')

次要:

  • 函数expand()转换结果集,以便您获得的不仅仅是打印输出中的记录ID。
  • Owns / Lives传递给in / out函数可确保仅遍历类类型Owns / Lives的边缘