当应用于另一个函数的结果时,OrientDB的函数做了什么?

时间:2014-12-05 17:36:50

标签: sql orientdb

我在2.0-M2上的行为非常奇怪。请考虑以下GratefulDeadConcerts数据库:

查询1

SELECT name, in('written_by') AS wrote FROM V WHERE type='artist'

此查询返回艺术家列表和每个人写的歌曲;大多数行至少有一首歌。

查询2

现在尝试:

SELECT name, count(in('written_by')) AS num_wrote FROM V WHERE type='artist'

在我的系统(OSX Yosemite; Orient 2.0-M2)上,我只看到一行:

name           num_wrote
---------------------------
Willie_Cobb    224

这似乎不对。但我试着更好地理解。也许count()导致in()查看所有write_by边...

查询3

SELECT name, in('written_by') FROM V WHERE type='artist' GROUP BY name

生成类似于第一个查询的结果。

查询4

现在尝试count()

SELECT name, count(in('written_by')) FROM V WHERE type='artist' GROUP BY name

路径错误 - 请尝试LET变量......

查询5

SELECT name, $wblist, $wbcount FROM V 
LET $wblist  = in('written_by'), 
    $wbcount = count($wblist) 
WHERE type='artist'

产生看似毫无意义的结果:

screen capture of query 5 results on orientdb studio

您可以看到$wblist$wbcount列彼此不一致,$wbcount值不会显示任何明显的进展,如累积结果。

请注意,奇怪的行为不仅限于count()。例如,first()做同样奇怪的事情。

1 个答案:

答案 0 :(得分:1)

与在RDBMS中一样,

count()仅计算一个值中所有记录的总和。出于您的目的,.size()似乎是正确的调用方法:

in('written_by').size()