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 次)。这意味着当你有很多帖子时它不会有效率。
我有一个 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 次)。这意味着当你有很多帖子时它不会有效率。