如何在arangoDB中显示所有子边缘节点[n级,如neo4J]

如何在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

设置具有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中的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吗?对不起,如果我的问题最初不清楚。