理解orient-db逻辑

时间:2015-06-13 15:43:39

标签: sql orientdb

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

假设有顶点电影1:n具有SortOf边缘的类型。我想知道其他类型的电影是“喜剧”。

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

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

它返回0条记录。 如果我删除<>,我会获得所有列表,甚至可以按=过滤:

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

返回1条记录。 现在我的搜索结果如下:

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

如果我放name!='Comedy'而不是LIKE,它会再次返回0条记录。

此查询的正确方法是什么?我应该在哪里放置count以查看每种类型的电影数量?

更新

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

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

但是第一个查询仍无效。我错过了什么?其他

1 个答案:

答案 0 :(得分:1)

您正在寻找的运营商是&lt;&gt;

其他运营商请参阅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'