因此,我是OrientDB的新手,尽管我非常擅长SQL,但在OrientDB中获得所需的语法却在逃避我。
我知道我可以做类似select *, in().size() as size from Users order by size desc
的事情来找到某个类中连接最紧密的节点(在这种情况下为用户),但是我如何找到几个层次最紧密的孩子呢?
也就是说,假设我有组织->促销(边缘)->平台->管理(边缘)->建议
如何在组织组织级别找到联系最紧密的建议?即,我知道我可以使用共享的查询轻松地找到一个级别上最紧密联系的建议,但是除此之外的级别最高的另一个联系又如何呢?
我最终希望得到一个结果,其中列出每个建议以及它与组织之间的间接联系(边数)。
谢谢!
答案 0 :(得分:0)
TRAVERSE
您应该使用命令TRAVERSE
来完成
SELECT out(PROMOTES).size() AS connectedOrg,*
FROM (
TRAVERSE out(MANAGES)
FROM Suggestion WHILE $depth < 2
)
WHERE $depth > 0
结果将是链接到建议的平台。记录可以重复。
与每个 Platform 一起,您可以获得称为connectedOrg
的 Organisation 的数量。
关于遍历:
遍历遵循记录中存在的记录ID,并将它们汇总到结果中。使用WHILE $depth < 2
可以将搜索限制在一个级别,而使用WHERE $depth > 0
可以从结果中删除原始记录。 More info here。
如果您需要(通过 Plateform )知道每个 Suggestion 链接到多少个 Organization ,请使用以下语法。
SELECT *, set(out(MANAGES).out(PROMOTES), null).size() FROM Suggestion
注意:, null
允许从AGGREGATE
切换到INLINE
。这样可以避免将所有大小汇总到一个记录中。有关更多信息,请参见the doc。