Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orientdb 使用WHERE定向SQL-筛选结果集?_Orientdb_Orientdb 2.1_Orient Sql - Fatal编程技术网

Orientdb 使用WHERE定向SQL-筛选结果集?

Orientdb 使用WHERE定向SQL-筛选结果集?,orientdb,orientdb-2.1,orient-sql,Orientdb,Orientdb 2.1,Orient Sql,我有一个关于OrientSQL查询的语义问题 以这个非常简单的图表为例: v(#12:1 User) --> e(#13:1 FriendOf) --> v(#12:2 User) 换句话说,一个rid为12:1的给定用户与另一个rid为12:2的用户是朋友 为了获得用户12:1的朋友,可以用Orient SQL这样表达: SELECT EXPAND(both("FriendOf")) FROM #12:1 此查询将返回由rid为12:2的用户组成的结果列表 现在让我们假设我想通

我有一个关于OrientSQL查询的语义问题

以这个非常简单的图表为例:

v(#12:1 User) --> e(#13:1 FriendOf) --> v(#12:2 User)
换句话说,一个rid为12:1的给定用户与另一个rid为12:2的用户是朋友

为了获得用户12:1的朋友,可以用Orient SQL这样表达:

SELECT EXPAND(both("FriendOf")) FROM #12:1
此查询将返回由rid为12:2的用户组成的结果列表

现在让我们假设我想通过一个额外的标准来过滤结果列表,比如说一个数值年龄:

SELECT EXPAND(both("FriendOf")) FROM  #12:1 WHERE age >= 10
上面的查询将过滤当前顶点12:1,而不是结果集。这是有道理的,但是有没有办法将过滤器应用于ExpandBothFriendDof结果而不是当前顶点?我知道我可以和小精灵这样做:

SELECT EXPAND(gremlin('current.both("FriendOf").has("age",T.gte,10)')) FROM #12:1
但上述内容似乎没有使用索引,至少在我要求它解释时没有。对于非常大的数据集,这是有问题的

那么,有没有合适的方法将WHERE语句应用于结果数据集呢

谢谢

。。。是否有方法将过滤器应用于ExpandBothFriendDof结果而不是当前顶点

简单的答案是嵌入您的基本选择扩展。。。在另一个选择中,即

SELECT FROM (SELECT EXPAND(both("FriendOf")) FROM #12:1) WHERE age >= 10
顺便说一句,在我的Mac电脑上,上面的代码花费了0.005秒,相比之下,Gremlin版本的代码花费了2秒多。那里一定有某种寓意:-

。。。是否有方法将过滤器应用于ExpandBothFriendDof结果而不是当前顶点

简单的答案是嵌入您的基本选择扩展。。。在另一个选择中,即

SELECT FROM (SELECT EXPAND(both("FriendOf")) FROM #12:1) WHERE age >= 10

顺便说一句,在我的Mac电脑上,上面的代码花费了0.005秒,相比之下,Gremlin版本的代码花费了2秒多。这里一定有一个寓意:-

@nightrese-我真的不明白为什么在SELECT FROM SELECT EXPAND中调用EXPAND是必要的。。。陈述你…吗?在任何情况下,我能找到的关于EXPAND的OrientDB文档都是非常不起眼的;如果你有同样的印象,也许我们中的一个人应该在…创建一个文档,我认为区别在于,如果不展开,你基本上只得到记录id@rid。使用EXPAND,基本上是告诉它通过遍历链接来获取实际的记录数据。例如,对于一个给定的用户顶点Bob,其FriendOf边将其连接到其他用户顶点,Bob vertex文档具有一个RID列表,在轻量边的情况下,这些RID表示到边或顶点的链接。这有意义吗?是的,我倾向于在可能的情况下使用Orient SQL,因为它在很多情况下看起来确实更快!我应该补充一点,有时候您不想遍历链接,只是为了检索rid或检查它的存在。我自己也曾使用过它,它在性能上有很大的不同,尤其是在不需要整个数据集的情况下使用轻量级边缘时。@nightrise-正如OrientDB文档所解释的,EXPAND有两种用途-在集合字段上使用时,它会在字段中展开集合。。。在链接RID字段上使用时,它会展开该链接指向的文档。在你的询问中,我认为第一种情况适用。我不明白的是为什么两者都不进行扩展。事实上,我倾向于说这要么是一个bug,要么是一个错误。事实上,我认为这是第二个案例扩展了链接指向的文档。展开应用于作为边/链接的BothFriendDof。它遍历它并将链接rid引用解析为它的整个文档。我不认为这是一个bug,因为您不一定要解决它,有时您只想检索rid。@nightrise-我真的不明白为什么在SELECT FROM SELECT EXPAND中调用EXPAND是必要的。。。陈述你…吗?在任何情况下,我能找到的关于EXPAND的OrientDB文档都是非常不起眼的;如果你有同样的印象,也许我们中的一个人应该在…创建一个文档,我认为区别在于,如果不展开,你基本上只得到记录id@rid。使用EXPAND,基本上是告诉它通过遍历链接来获取实际的记录数据。例如,对于一个给定的用户顶点Bob,其FriendOf边将其连接到其他用户顶点,Bob vertex文档具有一个RID列表,在轻量边的情况下,这些RID表示到边或顶点的链接。这有意义吗?是的,我倾向于在可能的情况下使用Orient SQL,因为它在很多情况下看起来确实更快!我应该补充一点,有时候您不想遍历链接,只是为了检索rid或检查它的存在。我自己也曾使用过它,它在性能上有很大的不同,尤其是在不需要整个数据集的情况下使用轻量级边缘时。@nightrise-正如OrientDB文档所解释的,EXPAND有两种用途-在集合字段上使用时,它会在字段中展开集合。。。在链接RID字段上使用时,它会展开该链接指向的文档。在你的询问中
,我相信第一种情况适用。我不明白的是为什么两者都不进行扩展。事实上,我倾向于说这要么是一个bug,要么是一个错误。事实上,我认为这是第二个案例扩展了链接指向的文档。展开应用于作为边/链接的BothFriendDof。它遍历它并将链接rid引用解析为它的整个文档。我不认为这是一个bug,因为你不一定要解决它,有时你只想检索rid。这似乎也可行,但也不使用索引:从12:1选择ExpandBothFriendDof[age>=10]这似乎也可行,但也不使用索引:从12:1选择ExpandBothFriendDof[age>=10]