我是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'`
但是第一个查询仍无效。我错过了什么?其他
答案 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'