【问题标题】:Common vertex to two relationships in OrientDbOrientDb 中两个关系的公共顶点
【发布时间】:2014-03-11 20:41:42
【问题描述】:

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

例如,

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

人 --- 拥有 --> 汽车

人 --- 生活 --> 位置

我正在尝试查找拥有特定型号汽车并居住在特定 zip 的所有 Person 顶点。

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

【问题讨论】:

    标签: graph-databases orientdb


    【解决方案1】:

    让我们假设这个领域模型:

    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 的边缘。

    【讨论】:

    • 谢谢。这非常有用。我不知道 out 的使用独立于 expand() 转换,就像您对查询的 where 部分所做的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多