首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于边的数组过滤遍历Arangodb图

在ArangoDB中,可以使用AQL(ArangoDB查询语言)来遍历图并进行基于边的数组过滤。以下是一个示例,展示如何使用AQL遍历图并过滤边。

假设我们有一个图,其中包含两个集合:vertices(顶点)和edges(边)。edges集合中的每个文档都有一个type字段,我们希望仅遍历类型为friend的边。

步骤1:创建图和集合

首先,确保你已经创建了图和集合。例如:

代码语言:javascript
复制
db._createVertexCollection("vertices");
db._createEdgeCollection("edges");

db._createGraph("myGraph", {
  edgeDefinitions: [
    {
      collection: "edges",
      from: ["vertices"],
      to: ["vertices"]
    }
  ]
});

步骤2:插入一些示例数据

插入一些顶点和边数据:

代码语言:javascript
复制
db.vertices.save({ _key: "user1", name: "Alice" });
db.vertices.save({ _key: "user2", name: "Bob" });
db.vertices.save({ _key: "user3", name: "Charlie" });

db.edges.save({ _key: "edge1", _from: "vertices/user1", _to: "vertices/user2", type: "friend" });
db.edges.save({ _key: "edge2", _from: "vertices/user2", _to: "vertices/user3", type: "family" });
db.edges.save({ _key: "edge3", _from: "vertices/user1", _to: "vertices/user3", type: "friend" });

步骤3:使用AQL进行基于边的数组过滤遍历

使用AQL遍历图并过滤类型为friend的边:

代码语言:javascript
复制
FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph'
  FILTER e.type == 'friend'
  RETURN { vertex: v, edge: e, path: p }

解释:

  • FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph':从顶点user1开始,遍历最多2步的出边。
  • FILTER e.type == 'friend':过滤类型为friend的边。
  • RETURN { vertex: v, edge: e, path: p }:返回当前顶点、边和路径。

完整示例

以下是完整的AQL查询:

代码语言:javascript
复制
FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph'
  FILTER e.type == 'friend'
  RETURN { vertex: v, edge: e, path: p }

运行此查询将返回从user1出发,类型为friend的边及其路径。

通过这种方式,你可以根据边的属性进行过滤,并遍历图中的相关顶点和边。根据你的具体需求,可以调整查询中的过滤条件和遍历深度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 如何去伪存真地看懂一份图数据库的评测报告?

    作者丨教授老边 图数据库作为新兴的技术,已经引起越来越多的人们关注。近来,笔者收到很多朋友的提问,诸如如何看懂评测报告内的门门道道?如何通过评测报告,知晓各个产品间的优势和劣势?一个完备的评测报告需要哪些性能测试内容?哪些内容是考验性能的硬核标准?哪些可以忽略不计,如何去伪存真…… 为了便于大家理解,本文第一部分先介绍关于图数据库、图计算与分析中的基础知识,第二、三部分进行图数据库评测报告的解读以及兼论图计算结果正确性验证。 1 基础知识 图数据库中的操作分为两类: 面向元数据的操作,即面向顶点、边或它们

    03

    布隆过滤器介绍

    我们知道检查一个元素是否在某一个集合中,使用HashSet是比较好的选择,因为在不发生Hash碰撞的情况下它的时间复杂度为常数级别,但是在数据量比较大的情况下,使用HashSet将会占用大量的内存空间。举个例子,长城防火墙有100亿个需要屏蔽的网址,来自计算机的每一次请求都要经过防火墙的过滤判断请求URL是否在黑名单中,如果我们使用HashSet来实现过滤的话,我们假设每个URL的大小为64B,那么100亿个就至少需要大约640GB的内存空间,这显然是不符合实际情况的。另一种解决方案是我们可以将URL存入关系型数据库,每次计算机发起请求我们对数据库进行exits查询,然而这种方案适用于并发量比较小的情况,若并发量较大,那么我们就需要对数据库进行集群。

    02

    高并发图数据库系统如何实现?

    随着越来越多的开源软件、微服务架构的出现,所有的软件都在宣称自己是高性能的,大量的软件在滥用市场宣传混淆视听,把完全不具备高性能特征的系统鼓吹成无所不能,这让大众很难甄别出哪些是真材实料,哪些是狗皮膏药,哪些是滥竽充数。更有别有用心的厂家,打着符合国际、国内标准旗号的发布的颠倒黑白的性能评测报告——例如某互联网大厂与另外一家同城的图数据库创业公司就先后鼓吹自家的图数据库系统性能全球第一,但实际上所有测试结果都采用接口预先封装的模式,无论多复杂的查询逻辑,结果永远是几毫秒返回,既无查询语句,也没有查询结果的正确性验证,这就属于典型的盗名欺世。

    01
    领券