OrientDB 查询没有来自另一个顶点的特定边的顶点

OrientDB query for vertices with no particular edge from another vertex

我有一个 Post 和一个 User 顶点,由 Posted 边相关。

我想从特定用户检索没有发布关系的帖子。

这是我的 SQL 查询:

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

我不能做类似

的事情

SELECT FROM Post WHERE user.id != 19

因为我在 类 之间没有联系,所以我有优势。

我该如何解决这个问题?

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 的记录 ID 是 #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])

输出:


更新

您也可以使用用户名代替 @rid:

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

但是请注意,let 子句每 Post 执行一次(在本例中为 3 次)。这意味着当你有很多帖子时它不会有效率。