Arrays 如何通过graphql使用参数将字符串的动态数组存储为neo4j中的节点属性?

Arrays 如何通过graphql使用参数将字符串的动态数组存储为neo4j中的节点属性?,arrays,node.js,neo4j,graphql,Arrays,Node.js,Neo4j,Graphql,我使用的是Neo4j(3.2.3)和graphql。我试图通过graphql将多个电话号码(动态地)作为字符串数组添加到用户的单个属性中。因此,用户可以拥有他/她想要添加的任意多个电话号码。 例如 User{ "name": "Neo", "Job": "Actor", "phoneNumber": [ "13274564", "23451674",

我使用的是Neo4j(3.2.3)和graphql。我试图通过graphql将多个电话号码(动态地)作为字符串数组添加到用户的单个属性中。因此,用户可以拥有他/她想要添加的任意多个电话号码。 例如

 User{
       "name": "Neo",
       "Job": "Actor",
       "phoneNumber": [
                       "13274564",
                       "23451674",
                       "56454646"
                      ]
        }
但是我无法得到想要的结果。有人能告诉我我做错了什么吗

下面是我的graphql typeschema和用户的变异查询:

    type User{

     name:String
     Job:String
     phoneNumber: [String]
    }


   type Mutation {

    addUser(
      name:String!
      Job:String
      phoneNumber: [String]       
    ): User 
   }
下面是我对解析器的密码查询:

addUser(_, params) {


  let query = `MERGE(u:User {_id:apoc.create.uuid()})
              ON CREATE SET u.name= {name},
                            u.Job= {Job},
                            u.phoneNumber = ["{{phoneNumber},{phoneNumber}}"]
当我通过GraphiQL运行此查询并添加所需的电话号码时,这些号码不会被更新,而是数据库中相同的文本phoneNumber会被更新,如下所示:

type User {
  name: String
  job: String
  phoneNumber: [PhoneNumber]
}

type PhoneNumber {
  number: String
}


有人能帮我吗?我也经历了apoc过程,但仍然无法找出如何为这种情况编写适当的密码查询。

由于您正在为
phoneNumber
参数传递字符串数组,您只需将用户节点上的
phoneNumber
属性设置为
phoneNumber
参数:

MERGE(u:User {_id:apoc.create.uuid()})
  ON CREATE SET u.name= {name},
                u.Job= {Job},
                u.phoneNumber = {phoneNumber}
如果要处理电话号码更新(保留以前的号码):

图形数据模型的更典型方法是将每个电话号码建模为一个节点,并将电话号码节点连接到用户节点:

MERGE(u:User {_id:apoc.create.uuid()})
ON CREATE SET u.name= {name},
              u.Job= {Job}
WITH *
UNWIND {phoneNumber} AS phone
MERGE (p:PhoneNumber {number: phone}
MERGE (u)-[:HAS_PHONE_NUMBER]->(p) 
这将稍微改变GraphQL模式,如下所示:

type User {
  name: String
  job: String
  phoneNumber: [PhoneNumber]
}

type PhoneNumber {
  number: String
}

另外,请务必查看可以从GraphQL模式驱动Neo4j数据模型并自动生成解析器的工具。

您始终是我的代码的救世主。非常感谢你的努力,感谢你的文章和演讲。一个简单的问题,如果我必须处理两个不同的字段作为字符串数组,例如phoneNumber和email(保留以前的数据),我应该怎么做?我接受答案。再次感谢!很高兴这是有用的:-)两个数组将是相似的-您只需迭代电子邮件地址。再次感谢:)。。。真是太棒了。我会像你提到的那样尝试迭代。是的,作为一名neo4j的铁杆粉丝和用户,我肯定会在未来几天内查看neo4j graphql集成。。!!很高兴收到一位我敬佩的人的回复:)祝你有一个gr8天!