我在 OrientDB 3.2.14 中有这个图:
用户 (Usuario) 可以属于 UnidadOrganizativa,该组织可以是 Oficina、Dpto、UnidadFiscal 或 FiscaliaRegional。 层次结构是:Oficina <--- Dpto <--- UnidadFiscal <--- FiscaliaRegional.
我需要用 UnidadFiscal 列出每个 Legajo,这个查询应该可以工作,但会抛出错误:
select fechaCreacion.format('yyyyMM') as name,
$uo as uo,
$uf as UF
from Legajo
Let $uo = $current.out('Legajo_responsable').out('Fiscal_usuario').out('Usuario_unidadFiscal')[jerarquia != "FISCALIA_GENERAL"][0],
$uf = (traverse in('UnidadOrganizativa_dependencias') from $parent.uo while jerarquia != "UNIDAD_FISCAL")
where fechaCreacion >= '2022-01-01' and fechaCreacion <= '2022-12-31' limit 10;
当我运行它时,东方说:
Class $parent not found DB name="heimdall-20230801"
我尝试了不同的方式,但没有任何效果。子查询中对 $parent 和 $current 的任何引用都不起作用。
在查询中 $uo 有一个正确的值,但如果它不是一个,我需要获取 UO 所属的 UnidadFiscal。
首先,从您的问题中我了解到您希望在结果中找到所有“Legajo”顶点和“Usuario_unidadFiscal”边作为一个兄弟行。 OrientDB MATCH 查询在这里可能会有帮助。
下面是一个可以工作的查询示例(注意:我没有测试它,所以无法判断它是否会按原样工作,可能需要修改)
MATCH {class:Legajo,
as: legjo,
where:{fechaCreacion >= '2022-01-01' AND
fechaCreacion <= '2022-12-31'} }
.out('Legajo_responsable')
.out('Fiscal_usuario')
.outE('Usuario_unidadFiscal'){as:unidadf,
where: {jerarquia != 'FISCALIA_GENERAL'} }
RETURN expand(legjo), expand(unidadf)
查询的思想是选择并返回顶点,然后传递到所需的边并返回扩展的(所有字段)。
正如我所说,我还没有测试过它,但是你可以尝试这种方法并检查。