如何在arangoDB中显示所有子边缘节点[n级,如neo4J]
设置具有100万条记录的事件集合。 成功设置ChildEvents边缘集合如何在arangoDB中显示所有子边缘节点[n级,如neo4J],arangodb,Arangodb,设置具有100万条记录的事件集合。 成功设置ChildEvents边缘集合 FOR c IN events FOR p IN events FILTER p.mynum == ( c.mynum + 1 ) INSERT { _from: c._id, _to: p._id} INTO ChildEvents RETURN $NEW 总记录:ChildEvents中的99
FOR c IN events
FOR p IN events
FILTER p.mynum == ( c.mynum + 1 )
INSERT { _from: c._id, _to: p._id} INTO ChildEvents
RETURN $NEW
总记录:ChildEvents中的999999
现在,我需要显示给定节点的所有父节点/子节点。
在本例中,我希望下面的查询返回350到99999之间的所有节点。
( 350 --> 351 --> 352 --> ....999999 )
对于出站“事件/350”中的v,任何子事件
返回v
但是这个查询只返回2条记录。如果使用1..200,则会限制返回的记录数。如何得到n。这种情况下的记录数
对于相同的设置,如果我们使用neo4J,它将返回所有节点,我希望在这里看到相同的行为
非常感谢您的帮助。因此子节点的
mynum
值最低,而父节点的值较高,对吗?对于测试集,我创建了一个events
表,如下所示:
FOR n IN 1..99999
LET doc = { mynum: n }
INSERT doc INTO events
FOR c IN events
FOR p IN events
FILTER p.mynum == ( c.mynum + 1 )
LET edge = { _from: c._id, _to: p._id }
INSERT edge INTO ChildEvents
在mynum
上创建一个后,我创建了如下边:
FOR n IN 1..99999
LET doc = { mynum: n }
INSERT doc INTO events
FOR c IN events
FOR p IN events
FILTER p.mynum == ( c.mynum + 1 )
LET edge = { _from: c._id, _to: p._id }
INSERT edge INTO ChildEvents
这将生成“从子级到父级”的图形,如:
parent <--- child [ <--- child(n) ... ]
它返回101个文档,从mynum:50开始,如:
[
{
"_id": "events/285436",
"mynum": 50
},
{
"_id": "events/285437",
"mynum": 51
},
{
"_id": "events/285438",
"mynum": 52
},
...
]
将x
设置为0
将返回起始节点,但将其更改为1
将其排除,开始返回一跳之外的节点:
[
{
"_id": "events/285436",
"mynum": 51
},
{
"_id": "events/285437",
"mynum": 52
},
{
"_id": "events/285438",
"mynum": 53
},
...
]
记住这一点,我们可以从图中的任意点返回节点。例如,将x
设置为99
FOR event in events
FILTER event.mynum == 50
FOR v IN 99..100 OUTBOUND event
ChildEvents
RETURN v
…将仅返回两个节点:
[
{
"_id": "events/285535",
"mynum": 149
},
{
"_id": "events/285536",
"mynum": 150
}
]
您还可以通过变量定义“跃点计数”值:
LET n_start = 100
LET n_end = 999
FOR event in events
FILTER event.mynum == 50
FOR v IN n_start..n_end OUTBOUND event
ChildEvents
RETURN v
看起来您无法从表中驱动它们(DB无法构建计划),但您可以创建绑定参数并以这种方式传递值:
/*JavaScript*/
常量aql=[
“事件中的事件”,
'筛选事件.mynum==50',
'对于@n_start..@n_end出站事件中的v',
“儿童事件”,
“返回v”,
];
常量变量={
n_起点:100,
完:999,,
};
const result=await db.\u查询(aql.join('\n'),vars.toArray();
使用绑定参数取决于语言,但这里有一些链接可以帮助您入门:
- (阿兰戈什或福克斯)
我不太理解这个例子。看起来您正在创建边缘,但文本中的查询:对于出站“事件/350”中的v,任何ChildEvents返回v
都是无效的AQL。此外,我还不太了解子/父关系——“mynum+1”是如何体现的?“ChildEvents”是使用mynum的边缘集合,用于自动插入no。例如{“source”:“ABC”,“target”:“DEF”,“tranno”:“A12345”,“type”:“REST”,“attributes”:{“myPrd”:“1”},“mynum”:1}。使用此边缘集合,可以像1-->2-->3-->4-->5…999999一样建立层次结构。如何显示给定节点的所有子节点?例如,如果我们提供节点4,上面的查询只返回2条记录4和5,而不返回其余的记录。期望返回给定节点的所有子节点。谢谢Kerry。但我的观点是,我们正在硬连接for循环中的数字。对于0..100出站事件中的v:在这个代码段中,我们可以从表中动态填充记录计数,而不是给出100吗?对不起,如果我的问题最初不清楚。