我只是想更新我的问题,以防其他人遇到这个问题。我使用的是 neo4j 和 graphql,它们会根据我的 graphql 模式自动生成查询和突变。
相反,我进行了修改并使用了@cypher 指令。我需要更多地控制我的数据的保存方式。
type Mutation {
setBatchTown(listOfTowns: [BatchTown]): Town
@cypher(statement:"""
UNWIND $listOfTowns AS el
MERGE (t:Town {name: el.name, state: el.state})
WITH t
MATCH (s:State)
WHERE t.state = s.name
CREATE (t)-[:STATE_OUT]->(s)
""")
setEvent(event: InputEvent): Event
@cypher(statement:"""
MERGE (e:Event { name: $event.name, day: $event.day, month: $event.month, time: $event.time, town: $event.town, state: $event.state })
WITH e
MATCH (s:State), (t:Town {name: e.town, state: e.state})
WHERE e.state = s.name AND e.town = t.name
MERGE (e)-[:TOWN_OF]->(t)
RETURN t
""")
}
然后当我提出请求时,我可以做这样的事情。
client.mutate({ variables: {
listOfTowns: [{
name: 'town1'
state: 'VA'
},
{
name: 'town2'
state: 'WA'
}]
}, mutation: CREATE_STATE_MUTATION })
.then(() => resolve())
.catch(err => reject(err))
})