我有美国所有州和城镇的清单。各州可以使用相同的城镇名称,因此我正在检查以确保每个城镇都与其受尊重的州相连。
我有与某个城镇相关的事件,但是问题是我的事件与不同州的多个城镇相关。如何将我的新活动与某个州的城镇联系起来? 这是我的架构。
type State {
stateName: String!
stateAbbreviation: String!
towns: [Town] @relation(name: "STATE_OUT", direction: "OUT")
}
type Town {
state: String!
name: String!
events: [CraftShowEvent]
}
type Event {
name: String!
day: String!
month: String!
time: String!
town: String!
state: String!
}
答案 0 :(得分:0)
在创建图形数据库时,请确保在"Town"
节点和"Event"
节点之间具有此数据模型
EVENT -> [] -> Town
WHERE
EVENT.town = Town.Name
AND
EVENT.state = Town.state
答案 1 :(得分:0)
我只是想更新我的问题,以防其他人遇到。我正在使用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))
})