Хранить массив объектов в узле - Neo4j - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь использовать узел, как если бы я использовал документ mongodb. Я хотел бы хранить информацию о человеке на узле Персона. Это работает нормально, однако, я получаю сообщение об ошибке при попытке вставить массив объектов.

Neo4j поддерживает только подмножество типов Cypher для хранения в качестве одноэлементных или массивных свойств. Пожалуйста, обратитесь к разделу cypher / синтаксис / значения руководства для более подробной информации.

Есть ли способ сделать это или это ограничение с Neo4j.

return session.run(
  "MERGE (person:Person {name: $name})" + 
  "SET person = {name: $name, tests: $tests}", 
  {
    name: name,
    tests: [
      { name: "Test 1", subject: "Math" },
      { name: "Test 2", subject: "English" }
    ]
  }
);

Ответы [ 2 ]

0 голосов
/ 16 января 2020

концептуально @cybersam прав. но если вам действительно нужно хранить объекты в свойстве узла, вы всегда можете преобразовать его в JSON. В библиотеке Neo4j apo c есть функция для этого: apo c .convert.to Json ()

0 голосов
/ 16 января 2020

С графической БД вы сохраняете «массив из N объектов», связанных с узлом, путем создания отношений из этого объекта с N другими узлами.

Например:

return session.run(
  "MERGE (person:Person {name: $name}) " +
  "FOREACH (x IN $tests |
     MERGE (t:Test {name: x.name}) ON CREATE SET t = x
     MERGE (person)-[:HAS_TEST]->(t))", 
  {
    name: name,
    tests: [
      { name: "Test 1", subject: "Math" },
      { name: "Test 2", subject: "English" }
    ]
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...