2017-04-26 5 views
0

ライブラリーの書籍を借りるユーザーのdbを使用して、同じ日付の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) 

私が望んでいたと思っていたのですが、「The Hours」だけが作成されました。私はここで何が欠けていますか?

+0

「MATCH(u:User)」(b:書籍) WH.U.Name = 'Al' AND u.Surname = 'Pacino' AND(b.title = 'The Hours' OR b.title = '戦争と平和')RETURN u.Name、b.title' return? –

+0

2冊の本を一致させる場合は、2冊の本を指定して、書籍の1つが見つからない場合にクエリ全体が失敗するようにする必要があります。それ以外の場合は、あなたの場合のように、それは見つけることができた本の関係だけを作成します。 (これは実際に必要とする動作によって異なります) – Tezra

+0

[Cypherで既存ノードとの関係を追加する](http://stackoverflow.com/questions/20456002/adding-relationship-to-existing-nodes-with-cypher) –

答えて

1

なぜ2つの書籍に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) 

あなたは上のインデックスがある場合:ブック(タイトル)を、次に:ブックMATCHは、インデックス・ルックアップを使用します。

関連する問題