2017-04-26 71 views
0

使用從圖書館借用圖書的用戶數據庫,我想用1個查詢創建具有相同日期的2個密鑰。在Neo4J中創建與1個密碼的2個關係

MATCH (u:User), (b:Book) 
WHERE u.Name = 'Al' AND u.Surname = 'Pacino' AND (b.title = 'The Hours' OR 
b.title = 'War and Peace') 
CREATE (u)-[:LEND {date:['16 March 2017']}]->(b) 

我認爲這將做我想做的,但只有'小時'創建。我在這裏錯過了什麼?

+0

MATCH(u:User),(b:Book) WHERE u.Name ='Al'AND u.Surname ='Pacino'AND(b.title ='The Hours'OR b.title ='戰爭與和平')返回u.Name,b.title'返回? –

+0

如果要匹配2本書,則應指定2本書,以便在其中一本書失蹤時整個查詢失敗。否則,就像你的情況一樣,它只會創建它能夠找到的書籍的關係。 (這取決於你實際需要的行爲) – Tezra

+0

[添加與Cypher關係到現有節點的可能的重複](http://stackoverflow.com/questions/20456002/adding-relationship-to-existing-nodes-with-cypher) –

回答

1

爲什麼你只用兩個書的'b'?你可以使用你想盡可能多的,對我來說,你可以這樣做:

MATCH (u:User), (b1:Book),(b2:Book) 
WHERE u.Name = 'Al' AND u.Surname = 'Pacino' 
AND b1.title = 'The Hours' 
AND b2.title = 'War and Peace' 
CREATE (u)-[:LEND {date:['16 March 2017']}]->(b1) 
CREATE (u)-[:LEND {date:['16 March 2017']}]->(b2) 
0

您可以創建任意數量的關係,所有你需要做的是通過在性能匹配的列表。

在這種情況下,你可以通過在書的標題列表:

MATCH (u:User) 
WHERE u.Name = 'Al' AND u.Surname = 'Pacino' 
MATCH (b:Book) 
WHERE b.title in ['The Hours', 'War and Peace'] // best to parameterize this 
CREATE (u)-[:LEND {date:['16 March 2017']}]->(b) 

如果你有一個索引:書(標題),則:書比賽將使用索引查找。