2015-04-23 4 views
2

У меня есть Post и вершины User, связанные краем Posted.Запрос OrientDB для вершин без определенного края из другой вершины

Я хочу получить сообщения, которые не имеют никакого отношения для определенного пользователя.

Вот мой SQL-запрос:

SELECT posts.* FROM posts WHERE posts.user_id != 19. 

Я не могу сделать что-то вроде

SELECT FROM Post WHERE user.id != 19

, потому что у меня нет связей между классами, у меня есть края.

Как я могу решить проблему?

ответ

1
create class User extends V 
create class Post extends V 

create class Posted extends E 

create vertex User set name = 'user1'  
create vertex User set name = 'user2'  

create vertex Post set name = 'post0' 
create vertex Post set name = 'post1' 
create vertex Post set name = 'post2' 

create edge Posted from (select from Post where name = 'post0') to (select from User where name = 'user1') 
create edge Posted from (select from Post where name = 'post1') to (select from User where name = 'user1') 
create edge Posted from (select from Post where name = 'post2') to (select from User where name = 'user2') 

Если у вас есть что-то подобное описанному выше, и, например, вы хотите знать, все сообщения, не связанные с user1 (который был бы post2). Скажем, идентификатор записи user1 is # 12: 0.

Вы можете:

select from Post where #12:0 not in out('Posted') 
// or 
select expand(in('Posted')) from (select from User where @rid not in [#12:0]) 

Выход: enter image description here


UPDATE

Вы также можете использовать имя пользователя вместо его @rid:

select * from Post where $record_id.rid[0] not in out('Posted') 
let $record_id = (select @rid from User where name = 'user1') 

Но обратите внимание, что пусть условия выполняется один раз для каждого сообщения (в данном случае, в 3 раза). Это означает, что он не будет эффективен, когда у вас будет много сообщений.

+0

В первом примере: Как я могу сделать то же самое, но вместо того, чтобы иметь @rid, у меня есть имя пользователя для проверки? –

+0

Смотрите мое обновление выше. – vitorenesduarte

Смежные вопросы