来自neo4j,新来自Arango。
我正在尝试查询我的数据并构建相应的数据结构。
所以我有类似的东西:
Circle A
/ \
Square A Circle B
/ \ \
Circle C Square B Square D
圆圈存储在文档集合中。 Square存储在文档集合中。
然后我有两个边缘集合 适当对应的HAS_CIRCLE和HAS_SQUARE。
我知道我想要圆圈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
中来自Circle A}的数据一样 - 我不希望这也有父母,孩子,正方形 - 只是字面上寻找该节点中包含的元数据。
我知道我可以这样开始......但我很快迷路了。即使在做基础测试时 - 我似乎无法正确地收集它并将数组关联到一个键。
FOR c in Circle
FILTER c.name === 'Circle B'
FOR hc in HAS_CIRCLE
FILTER hc._from === c._id
答案 0 :(得分:1)
你一定错过了the trip to the graph documentation in ArangoDB。可以肯定的是,你可以使用经典连接的文档查询(就像你尝试过的那样)进行图形迭代,并像在传统SQL中那样在任何其他RDBMS上进行映射。
然而,如果你在use the pattern matching traversals这样的查询中,ArangoDB会公布其真实的图形功能:
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。
答案 1 :(得分:1)
我的查询最终看起来像。如果这是最理想的,但仍然没有100%,但产生我正在寻找的结果。
FOR c IN Circle
FILTER c.name == 'Circle B'
RETURN {
"circle" : c,
"parents": ( FOR parents IN INBOUND b._id HAS_CIRCLE RETURN parents )),
"children": ( FOR children IN OUTBOUND b._id HAS_CIRCLE RETURN children ),
"squares": ( FOR squares IN OUTBOUND b._id HAS_SQUARE RETURN squares )
}