【问题标题】:OrientDB - filter selected vertices by other vertices connected to themOrientDB - 通过连接到它们的其他顶点过滤选定的顶点
【发布时间】:2016-06-18 08:23:59
【问题描述】:

我不是 OrientDB 专业人士,所以也许我的问题听起来很愚蠢;但我在文档或网络上没有找到任何答案。

This is a sample of a data structure that I have: 我想找到所有的海狸,它们有蓝眼睛,它们很开心,它们知道这一点。

我确实设法使用 out() 函数选择眼睛颜色和幸福状态 - 类似于

SELECT out('has').eyeColors, out('is').happinessState FROM beavers

但是如何按那些连接的顶点进行过滤?我试过了

SELECT * FROM beavers WHERE out('has').eyeColors = 'blue' AND out('is').happinessState = 'happy and knows it'

SELECT * FROM beavers WHERE (SELECT out('has').eyeColors FROM beavers) = 'blue' AND (SELECT out('is').happinessState FROM beavers) = 'happy and knows it'

但两种查询类型都倾向于返回空结果。

那么 - 我怎样才能实现这样的选择?

*我运行 Community Edition,v. 2.1.11,并在服务器端 JS 函数中完成所有这些操作。

谢谢, 格雷戈里

【问题讨论】:

    标签: sql filtering server-side orientdb


    【解决方案1】:

    在 WHERE 条件下,您需要使用 CONTAINS 词,因为 out() - 所以对于 in()both() - 返回一个列表。

    例如

    select from Beaver where out('has').eyeColors contains "Blue" and out("iss").happinessState contains "happy and knows it"
    

    您可以通过选择它来验证它是否返回列表:

    select out('has').eyeColors from Beaver
    

    PS

    我看到您正在使用一个名为 is 的边缘类,我认为这是不允许的,因为它是一个私有词。


    希望对您有所帮助。伊万


    更新

    select name from Children
    let $a=(select from Beaver where in('has').@rid contains $parent.$current.@rid and out('has').eyeColor contains "Blue" and out("iss").happinessState contains "happy and knows it")
    where $a.size() > 0
    

    【讨论】:

    • 完美运行,感谢 Ivan :) 附加连接问题 - 我可以在子查询中使用这样的查询吗?
    • 例如,当添加一个额外的类别时,与 Has edge 连接到 Beavers 的儿童,并且想要检索有 Beavers,拥有蓝眼睛并且快乐并且他们知道的儿童(谢谢您对类名称的评论,但在这种情况下,所有名称都是虚拟的,只是为了使逻辑更清晰)。或者,在 JS 服务器端功能中是否有更多的性能方法来实现这一点?
    • 嗯,这稍微复杂一些。我要修改我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多