Хранить массив объектов в узле - Neo4j

Я пытаюсь использовать узел, как если бы я использовал документ 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 ответа


В DB графа способ хранения «массива из 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" }
    ]
  }
);

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


Есть идеи?

10000