[英]Orientdb - where clause with multiple edges
我在这方面还很新,所以我将继续讨论。
在我们的应用程序中,我们具有可以在用户之间共享并存储在文件夹中的注释。 单个便笺显然可以位于多个文件夹中(不能共享)。 直到现在在文件夹中显示注释,我们一直在使用以下查询:
(select expand(both(\'InFolder\')) from @folder_rid)
但是现在,我们正在开发一些“高级过滤器”,在其中我们要显示特定文件夹中的注释或不在其中的注释。注释也可以被标记(通过单个标记),因此使用“ where子句非常容易“
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'HasTag\').@rid = @tag_rid
要么
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'HasTag\').@rid <> @tag_rid
现在是问题所在。 由于注释可以存储在上述多个文件夹中,因此该方法无效。 当我指定Edge(?)目标文件夹的此数组中的哪个位置应该是有效时:
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'InFolder\')[0].@rid = @folder_rid
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'InFolder\')[1].@rid = @folder_rid
但这显然不是做到这一点的方法。 我发现( http://orientdb.com/orientdb-improved-sql-filtering/ )可以使用范围来做到这一点,例如
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'InFolder\')[0-2].@rid = @folder_rid
但是它只是计算方括号(oO)内的值。 我也尝试使用[1,2,3]并使用https://code.google.com/p/orient/wiki/Document_Field_Part的信息,但无法正常工作。
正确的语法是这样做的,还是整个方法不好? 如果问题出在基础知识上,那么这样做的好方法是什么? 感谢您的帮助,对于我在语法上的所有错误深表歉意。
我相信您要查询的查询是:
SELECT
FROM (SELECT expand(out('CanView')) FROM <user_rid>)
WHERE <folder_rid> IN out('InFolder')
一个例子:
create class User extends V
create class Note extends V
create class Folder extends V
create class CanView extends E
create class InFolder extends E
create vertex User set name = 'user'
create vertex Note set name = 'note0'
create vertex Note set name = 'note1'
create vertex Note set name = 'note2'
create vertex Folder set name = 'folder0'
create vertex Folder set name = 'folder1'
create edge CanView from (select from User where name = 'user') to (select from Note where name = 'note0')
create edge CanView from (select from User where name = 'user') to (select from Note where name = 'note1')
create edge InFolder from (select from Note where name = 'note0') to (select from Folder where name = 'folder0')
create edge InFolder from (select from Note where name = 'note1') to (select from Folder where name = 'folder1')
create edge InFolder from (select from Note where name = 'note2') to (select from Folder where name = 'folder1')
有三个音符。 用户可以看到note0和note1 。 note0在folder0中 , note1在folder1中 。
假设我们希望用户可以看到folder0中的所有注释。 上面的查询将返回note0 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.