Neo4j: Cypher-запрос возвращает неверный результат json - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема с моим запросом шифра.

Ситуация объяснена: пользователь может подключаться к другим узлам CONTACT, но он также может подключаться к узлам EVENT.Другие пользователи также могут подключаться к этим узлам событий.Мы ожидаем получить узлы, к которым мы подключены (CONTACT & EVENT), но нам также нужно извлечь узлы событий узлов CONTACT, к которым мы подключены.

Это график, который мы хотим видеть, когда мыизвлечь подключенные узлы из нижнего центрального узла CONTACT:

neo4j graph

Но мы получаем этот вывод json:

{
  "_type": "Node",
  "_id": 1,
  "nodeType": "EVENT",
  "nodeId": 1,
  "connected_with": [
    {
      "_type": "Node",
      "_id": 0,
      "nodeType": "CONTACT",
      "nodeId": 1
    },
    {
      "_type": "Node",
      "_id": 2,
      "nodeType": "CONTACT",
      "nodeId": 2,
      "connected_with": [
        {
          "_type": "Node",
          "_id": 0,
          "nodeType": "CONTACT",
          "nodeId": 1
        }
      ]
    }
  ]
}

Мы хотимуглубиться на 2 уровня, что означает, что мы хотим видеть контакты, с которыми мы связаны, а также контакты, с которыми мы «встретились» на событии, поэтому мы хотим углубиться на 2 уровня.

В настоящее время у нас есть этот зашифрованный запросработает, но, как упоминалось ранее, он не работает.

MATCH path = (n:Node {nodeId: 1})<-[:CONNECTED_WITH*]-(nodes)
WITH collect(path) as paths
CALL apoc.convert.toTree(paths) yield value as json
RETURN json

Любая помощь будет признательна!

1 Ответ

0 голосов
/ 16 марта 2019

Ваши результаты, кажется, соответствуют тому, что вы говорите, что вы хотите, за исключением того, что они представлены в виде дерева (который вы просили).

Вы заявляете, что не «видите» то, что ожидали (предположительно вБраузер neo4j).Это связано с тем, что запрошенные вами результаты не являются простыми узлами, отношениями и / или путями.

Вместо этого попробуйте это (обратите внимание также на верхнюю границу 2 для глубины шаблона пути переменной длины).):

MATCH path = (n:Node {nodeId: 1})<-[:CONNECTED_WITH*..2]-(nodes)
RETURN path

В сторону: наличие только одной метки узла, Node, со свойством nodeType, которое указывает точный «тип» узла, обычно не является правильным способом моделированиявещи.Это усложняет понимание БД, приводит к усложнению вашего кода и усложняет использование индексации.Вы, вероятно, хотите иметь отдельные метки (скажем, Person и Event).Вы также можете захотеть иметь разные типы отношений.

...