2016-02-16 5 views
0

У меня сложный граф. Я использую обход (через ArangoJS) с также довольно сложным расширителем Function и traversalVisitor.ArangoDB: возможно ли «подделки» ребер в обход графика?

Для этого обхода, я хотел бы знать, если это возможно, чтобы создать динамические отношения (или поддельных отношения) между некоторыми узлами в моем графике): То есть, на основе некоторых атрибутов в вершине, пусть обходной путь проводит исследование графика, как если бы существовала граница между текущей вершиной и другой.

Я пытался обмануть расширитель функцию , толкая поддельный край (от текущей вершины к другой, не связанных один на графике) в структуры обхода данных, что-то вроде:

if (complex_criteria(vertex)) { 
    var unconnectedVertexId = ... 
    var unconnectedVertex = someCollection.document(unconnectedVertexId); 
    connected.push({ edge:{_id:'newId', _from:vertex._id, _to:unconnectedVertex._id}, vertex: unconnectedVertex }); 
} 
.. 
return connected; 

Это не сработало. (варианты обхода были следующими: направление: «исходящий», стратегия: «depthfirst»)

Любая лучшая идея?

Спасибо!

ответ

2

я думаю, что есть небольшая ошибка в вас код:

if (complex_criteria(vertex)) { 
    var unconnectedVertexId = ... 
    var unconnectedVertex = someCollection.document(unconnectedVertexId); 
    connected.push({ edge:{_id:'newId', _from:vertex._id, _to:unconnectedVertex._id}, vertex: unconnectedVertex }); 
} 
.. 
return connected; 

«поддельный край» _to должен указывать на unconnectedVertex._id, а не сам объект. Можете ли вы проверить, устраняет ли это проблему?

+0

_id: это уже было в моем тестовом примере. Ошибка при изменении названий переменных выше для ясности. Я исправил вопрос. Знаете ли вы, где в коде ArangoDB я мог видеть, как впоследствии используется структура данных * подключенного * из расширителя? Я думаю, что могут быть некоторые ограничения в том, как эта структура данных используется впоследствии. (Например, возможно, чтобы получить край от несуществующего идентификатора края?) Может помочь .. Cheers – Salavat2

+1

Файл, который вы ищете, это 'js/common/modules/@ arangodb/graph/traversal.js' в текущей ветке devel или 'js/common/modules/org/arangodb/graph/traversal.js' есть' 3' вызовы 'config.expander', которые соответствующие места. Из того, что я вижу, видно, что после «расширителя» ребро не подтверждается встроенными функциями. Может быть, '_id' где-то оценивается внутри, поэтому убедитесь, что он по крайней мере выглядит правильно. Несвязанная вершина проверяется, и если идентификатор неизвестен arango unconnectedVertex, будет null и может вызвать проблемы. – mchacki

+0

Я отключил атрибут «направление» из вариантов обхода. (Документация в настоящее время неясно об этом, заявив, что «расширитель должен быть установлен, если атрибут направления не установлен») – Salavat2

Смежные вопросы