2015-04-23 95 views
2

我有一个PostUser顶点,由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)。假设记录ID为用户1#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

相关问题