【发布时间】:2015-04-17 07:04:42
【问题描述】:
我在这方面还很陌生,所以我会直接去看看这个案例。
在我们的应用程序中,我们有可以在用户之间共享并存储在文件夹中的笔记。单个笔记显然可以在多个文件夹中(不能共享)。到目前为止,为了在文件夹中显示笔记,我们使用了这个查询:
(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
现在问题来了。由于笔记可以存储在多个文件夹中,上述方法不起作用。当我指定这个边缘数组中的哪个位置(?)目标文件夹应该是:
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 的信息 但我无法让它工作。
执行此操作的正确语法是什么,或者整个方法很糟糕。如果问题在于基础知识,那么这样做的好方法是什么?感谢您的帮助,并对我在语法上犯的所有错误表示歉意。
【问题讨论】: