ArangoDB:路径中集合的最后一个

jjjwad0x  于 2022-12-16  发布在  Go
关注(0)|答案(1)|浏览(117)

我有两个包含资产和资产类型的文档集合,以及一个用于创建的边缘集合:

  • 资产类型的层次结构(* dmr-无线电 * is_a无线电is_a * 资产 *)
  • 资产内容的层次结构(* 车辆 * contains * 收音机 *)
  • 指向资产类型的链接(* 车辆 * is_a * 车辆 收音机 * is_a * dmr-收音机 *)。

我试图找到车辆中的所有无线电设备,我想使用k Paths图形查询来获取属于无线电设备类型的所有资产(见下文),但我很难找到一种方法来只返回属于无线电设备的资产(assets 集合中的最后一个顶点)。
有没有一种方法可以从某个集合中获取路径的最后一个顶点?有没有更好的方法来执行此查询?

FOR path
  IN 1..100 OUTBOUND K_PATHS
  'assets/493761' TO 'assetTypes/radio'
  GRAPH assetRelationships
  RETURN path
niwlg2el

niwlg2el1#

我已经设法使用User-defined Function获得了所需的内容

/**
 * ArangoDB User-defined Function for getting the last
 * vertex of a collection type in a graph path
 *
 * @param {Path} path ArangoDB graph path to search
 * @param {string} type Name of collection that the returned
 *   vertex should be from
 */
const lastOf = (path, type) => {                                                                                                                                                                                                                                                                                                                                                           
  type += '/';
  
  for (let i = path.vertices.length - 1; i => 0; i--) {
    if (path.vertices[i]._id.startsWith(type)) {
      return path.vertices[i];
    }
  }

  return null;
};

我在建立数据库连接时注册了该数据库

import { Database } from 'arangojs';

const database = new Database({
 ...
});

...

await database.createFunction('MY_FUNC::LAST_OF', lastOf.toString(), true);

然后在AQL查询中使用

FOR path
  IN 1..100 OUTBOUND K_PATHS
  'assets/493761' TO 'assetTypes/radio'
  GRAPH assetRelationships
  RETURN MY_FUNC::LAST_OF(path, 'assets')

相关问题