Arrays 如何通过graphql使用参数将字符串的动态数组存储为neo4j中的节点属性?
我使用的是Neo4j(3.2.3)和graphql。我试图通过graphql将多个电话号码(动态地)作为字符串数组添加到用户的单个属性中。因此,用户可以拥有他/她想要添加的任意多个电话号码。 例如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",
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天!