2014-10-07 3 views
0

В Neo4j я возвращаю список узлов, из которых - в цикле - я читаю их идентификаторы и, для всех из них, я читаю их отношения, используя (в этом примере я используя node_id = 3071):Neo4J получить отношение id от url

http://localhost:7474/db/data/node/3071/relationships/out 

выходной сигнал в формате JSON (для заданного значения идентификатора) выглядит следующим образом:

[{'end': 'http://localhost:7474/db/data/node/3070', 
'extensions': {}, 
'self': 'http://localhost:7474/db/data/relationship/11101', 
'property': 'http://localhost:7474/db/data/relationship/11101/properties/{key}', 
'type': 'IS', 'properties': 'http://localhost:7474/db/data/relationship/11101/properties', 
'data': {}, 
'start': 'http://localhost:7474/db/data/node/3071'}] 

Мы видим, что наш узел 3071 подключен к 3070. в результате получается, однако в обфускации , а не в простой форме. Как я могу получить этот 3070 (идентификаторы подключенных узлов) без использования регулярных выражений?

ответ

1

Я думаю, что ответ заключается в том, что вы этого не делаете.

Ваш конкретный запрос REST здесь запрашивает отношения. Идентификатор узла - это свойство узла, которое вы не ожидали бы при запросе отношений.

If you ask for the node то JSON, что сервер отвечает будет включать в себя следующее:

"metadata" : { 
    "id" : 4147, 
    "labels" : [ "Person" ] 
} 

Но это относится только к выборке информации об узлах.

Возможно, вы также используете старую версию. В current documentation для этого же вызова REST вы ожидаете увидеть этот объект метаданных с идентификатором для отношения, но он не был включен в ваш ответ образца с вашего сервера.

Рассмотрим с помощью REST API для извлечения URL-адресов, описанных start и end, и вы получите обратно JSON, который включает в себя этот metadata с id собственности - это ваш ответ, без регулярных выражений.

EDIT: Как Майкл Hunger ниже предлагает - если вы готовы отойти от JSON вы можете получить то, что вы хотите, запустив простой Cypher запрос:

MATCH (n)-->(other) WHERE id(n) in {ids} RETURN id(other),other 

Указание other параметров в be {"ids":[3071, 3072, 3073]}. Но, как и другое решение (выбор узлов по отдельности), для него требуется дополнительный вызов; вы не можете получить информацию из ответа на запрос об инцидентах.

+1

Я действительно использовал бы Cypher, чтобы делать то, что вы пытаетесь сделать: 'MATCH (n) -> (other) WHERE id (n) in {ids} RETURN id (other), другие' params будут ' {"ids": [3071, 3072, 3073]} ' –

+0

Отредактировано для включения этого. Я думаю, что исходный вопрос меня немного подбросил, потому что казалось, что OP пытался получить эту информацию из запроса для инцидентов. Вероятно, существует несколько способов получить идентификатор узла (но все они предполагают необходимость дополнительных вызовов) – FrobberOfBits

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