ArangoDB:仅遍历时间范围内的边

时间:2015-03-02 23:12:25

标签: graph arangodb

我正在尝试time based versioning。 我创建了一个顶点,该顶点连接到其他顶点,一边是这边的:

{
  "_id": "edges/426647569364",
  "_key": "426647569364",
  "_rev": "426647569364",
  "_from": "nodes/426640688084",
  "_to": "nodes/426629284820",
  "valid_from": "1385787600000",
  "valid_till": "9007199254740991"
}

另一方面就是这个优势:

{
  "_id": "edges/426679485396",
  "_key": "426679485396",
  "_rev": "426845488084",
  "_from": "nodes/426675749844",
  "_to": "nodes/426629284820",
  "valid_from": "1322629200000",
  "valid_till": "1417323600000"
}

第一个边缘的valid_till值是Number.MAX_SAFE_INTEGER函数的输出。

我稍微看了custom vistors,看起来它专注于过滤顶点而不是边缘。

如何使用new Date().getTime()Number.MAX_SAFE_INTEGER之间的valid_till值将我的遍历限制为边缘?

1 个答案:

答案 0 :(得分:1)

您可以在遍历中使用followEdges属性。 followEdges可以选择是用于过滤边缘的JavaScript函数。它将在遍历中的每个边缘被调用:

var expandFilter = function (config, vertex, edge, path) { 
  return (edge.vaild_till >= new Date().getTime() && 
          edge.valid_till <= Number.MAX_SAFE_INTEGER);

};

require("org/arangodb/aql/functions").register("my::expandFilter", expandFilter);

然后可以通过在遍历选项的followEdges属性中指定它来在常规自定义过滤器中进行遍历,例如:

LET options = { 
   followEdges: 'my::expandFilter' 
}
FOR doc IN TRAVERSAL(nodes, edges, 'nodes/startNode', 'inbound', options) 
  RETURN doc.vertex