【问题标题】:Store array of objects within a node - Neo4j在节点内存储对象数组 - Neo4j
【发布时间】:2020-01-16 04:08:04
【问题描述】:

我正在尝试像使用 mongodb 文档一样使用节点。我想在 Person 节点上存储有关人员的信息。这工作正常,但是,当我尝试插入对象数组时出现错误。

Neo4j 仅支持 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" }
    ]
  }
);

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    使用图形数据库,存储与节点相关的“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" }
        ]
      }
    );
    

    【讨论】:

      【解决方案2】:

      从概念上讲,@cybersam 是对的。 但是,如果您真的需要将对象存储在节点属性中,您始终可以将其转换为 JSON。 Neo4j 的 apoc 库有一个函数:apoc.convert.toJson()

      【讨论】: