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])
Выход:
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 раза). Это означает, что он не будет эффективен, когда у вас будет много сообщений.
В первом примере: Как я могу сделать то же самое, но вместо того, чтобы иметь @rid, у меня есть имя пользователя для проверки? –
Смотрите мое обновление выше. – vitorenesduarte