【问题标题】:can i qualify on orientdb vertex/edge class in a gremlin query?我可以在 gremlin 查询中获得 orientdb 顶点/边缘类的资格吗?
【发布时间】:2016-04-13 20:08:27
【问题描述】:

orientdb 有一个看似“非标准”的功能,可以创建特定类别的顶点和边。

g.createVertex('class:person')

但我不清楚我是否/如何通过“标准”gremlin 获得该课程的资格?

我见过这样的语法参考:

g.V('@class','person')...

here,但后来提到了这种语法踢脚线索引。

谁能解释一下这个话题?

【问题讨论】:

    标签: orientdb gremlin


    【解决方案1】:

    Gremlin 似乎没有采用 Schema 特性,也不是所有的图数据库都支持 schema,所以我认为你不能直接用 Gremlin 操作 OrientDB Schema。

    无论如何,您可以使用createVertexType() 命令在 OrientDB trhought Gremlin 中创建类。

    1. 连接到 ODB 数据库:

      g = new OrientGraphNoTx('remote:localhost/GremlinDB')
      
      ==>orientgraphnotx[remote:localhost/GremlinDB]
      
    2. 创建扩展 V 的 Vertex 类 Person

      g.createVertexType('Person','V')
      
      ==>Person
      

    现在,如果您查看 OrientDB Studio 中的 Schema,您将看到创建的新类:

    已编辑

    添加两个顶点后

    我们可以找到name = 'John'的人。

    1. 使用has():

      g.V.has('@class','Person').has('name','John')
      
      ==>v(Person)[#12:0]
      
    2. 使用has() + T 运算符:

      g.V.has('@class','Person').has('name',T.eq,'John')
      
      ==>v(Person)[#12:0]
      
    3. 使用contains()

      g.V.has('@class','Person').filter{it.name.contains('John')}
      
      ==>v(Person)[#12:0]
      
    4. 使用==

      g.V.has('@class','Person').filter{it.name == 'John'}
      
      ==>v(Person)[#12:0]
      

    希望对你有帮助

    【讨论】:

    • 感谢@LucaS,是的,我已经使用createVertexType 创建了 V 的子类,但我的问题是现在在 gremlin 查询中搜索该子类的惯用方式(例如找到我所有名字是“卢卡斯”的人)...
    • 嗨@tony_k,我错过了查询:)。我正在编辑我的答案。
    • 嗨@tony_k,我发布了一些方法,您可以使用它来检索您正在寻找的结果。希望对您有所帮助。
    • 嗨@tony_k,你有机会尝试查询吗?
    • 感谢@LucaS,这些查询看起来不错,我会接受您的回答。你对“@class”和索引有什么想法吗?即“@class”是否有隐式索引,这些查询是否使用它?
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多