gpt4 book ai didi

javascript - AQL Arango - 使用边获取顶点和邻居

转载 作者:行者123 更新时间:2023-12-02 14:25:08 25 4
gpt4 key购买 nike

来自 neo4j,是 Arango 的新手。

我正在尝试查询我的数据并构建相应的数据结构。

所以我有这样的东西:

    Circle A
/ \
Square A Circle B
/ \ \
Circle C Square B Square D

圆存储在文档集合中。Square 存储在文档集合中。

然后我有两个边缘集合HAS_CIRCLE 和 HAS_SQUARE 相应对应。

我知道我想要 Circle B 及其邻居 - 在这样的结构中。

{
circle: {data from Circle B},
parents: [{data from Circle A}],
children: [{data from Circle C}],
squares: [{data from Square B}, {data from Square D}]
}

*还要注意的是,我不打算嵌套这个结构。就像当我想要 parents 中的 {data from Circle A} 时 - 我不希望它也有parents、children、方 block - 只是字面上查找该节点中包含的元数据。

我知道我可以这样开始......但我很快就迷失了。即使在做基础知识时 - 我似乎也无法正确收集它并将数组与键关联起来。

FOR c in Circle
FILTER c.name === 'Circle B'
FOR hc in HAS_CIRCLE
FILTER hc._from === c._id

最佳答案

您一定错过了the trip to the graph documentation in ArangoDB 。当然,您可以使用带有经典连接的文档查询(就像您尝试过的那样)来执行图形迭代并映射它,就像您在任何其他 RDBMS 上的传统 SQL 中所做的那样。

但是,ArangoDB 展示了其真正的图形功能,如果您use the pattern matching traversals在这样的查询中:

FOR vertex, edge, path IN 
1..5
OUTBOUND
'circle/A'
GRAPH circesAndSquares
FILTER edge.name == 'Circle B'
RETURN {vertices: vertex, edges: edge, paths: path}

edge 将包含当前遍历步骤的边文档,vertex 顶点。对它们进行FILTER操作将从RETURN语句中隐藏不匹配的文档。可以根据迭代深度过滤路径,然后可能会中止遍历:

FILTER path.edges[1].name == 'Circle B'

您还可以过滤任何迭代深度:

FILTER path.vertices[*].isValid == true

文档中的示例演示了如何使用命名和匿名图以及如何将数据插入到 ArangoDB 中。 ArangoDB有一个特殊的edge collection type它隐式地知道并强制边缘文档上的 _from_to 属性 - 但除了此限制之外,您可以用任意文档填充它。

您还可以combine regular AQL queries with graph traversals, as demonstrated in this example .

关于javascript - AQL Arango - 使用边获取顶点和邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com