理解 orient-db 逻辑

Understand orient-db logic

我是 OrientDB/grahps 的新手,我想清楚地理解它的逻辑。

假设有顶点电影 1:n 具有 SortOf 边的流派。我想知道其他类型的电影 'Comedy'.

阅读文档后我认为它应该是这样的:

SELECT expand(in('SortOf').out('SortOf')[name<>'Comedy'])
FROM Genre WHERE name = 'Comedy'`

它returns 0条记录。 如果我删除 <> 我会得到所有列表,甚至可以按 =:

过滤
SELECT expand(set(in('SortOf').out('SortOf')[name='Drama']))
FROM Genre WHERE name='Comedy'

Returns 1 条记录。 现在我有以下查询的结果:

SELECT FROM (SELECT expand(set(in('SortOf').out('SortOf')))
FROM Genre WHERE name = 'Comedy')
WHERE name NOT LIKE 'Comedy'`

同样,如果我用 name!='Comedy' 代替 LIKE,它会 returns 0 条记录。

这个查询的正确方法是什么?我应该把 count 放在哪里才能看到每个类型有多少部电影?

更新

我已将 != 替换为 <>,因此有效查询为:

SELECT FROM (SELECT expand(set(in('SortOf').out('SortOf')))
FROM Genre WHERE name='Comedy')
WHERE name<>'Comedy'`

但第一个查询仍然无效。我错过了什么?否则。

您要查找的运算符是<>

有关其他运算符,请参阅 this

更新 你的情况:

create class Movie extends V
create class Genre extends V
create class SortOf extends E

create vertex Movie set name = 'm1'

create vertex Genre set name = 'Comedy'
create vertex Genre set name = 'Drama'


create edge SortOf from (select from Movie where name = 'm1') to (select from Genre where name = 'Comedy')
create edge SortOf from (select from Movie where name = 'm1') to (select from Genre where name = 'Drama')


select from (
    select expand(in('SortOf').out('SortOf')) from Genre where name = 'Comedy'
) where name <> 'Comedy'