Я просто хотел обновить свой вопрос на случай, если кто-нибудь еще столкнется с этим. Я использовал 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))
})