Я все еще новичок в этом, поэтому я просто перейду к делу.
В нашем приложении есть заметки, которыми можно делиться между пользователями и хранить в папках. Одна заметка, очевидно, может находиться в нескольких папках (которые не могут быть общими). До сих пор для отображения заметок в папке мы использовали этот запрос:
(select expand(both(\'InFolder\')) from @folder_rid)
Но теперь мы разрабатываем некоторые «расширенные фильтры», в которых мы хотим показывать заметки, которые находятся в определенной папке, или те заметки, которых нет в ней. Заметки также могут быть помечены (одним тегом), поэтому это было довольно легко, используя предложение "
SELECT FROM (select expand(both(\'CanView\')) from @user_rid) where out(\'HasTag\').@rid = @tag_rid
or
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, но мне не удалось заставить его работать.
Каков правильный синтаксис для этого или весь этот подход просто плохой. Если проблема в основах, каков хороший способ сделать это? Спасибо за помощь и извините за все ошибки, которые я сделал в грамматике.