ArangoDB:只遍历一个时间范围内的边
ArangoDB: traverse only edges within a time range
我正在试验 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,它看起来像是专注于过滤顶点而不是边缘。
如何将遍历限制为 valid_till 值介于 new Date().getTime()
和 Number.MAX_SAFE_INTEGER
之间的边?
您可以在遍历中使用 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
我正在试验 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,它看起来像是专注于过滤顶点而不是边缘。
如何将遍历限制为 valid_till 值介于 new Date().getTime()
和 Number.MAX_SAFE_INTEGER
之间的边?
您可以在遍历中使用 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