2013-11-24 66 views
0

我看到一個奇怪的問題,即當我運行以下查詢時,Cypher查詢正在創建多個節點,並且創建的節點數取決於多少個元素查詢Neo4J Cypher查詢在查詢中定義了IN子句時創建了多個節點

MATCH (shipper:Shipper)-[:SHIPS_PRODUCT_TYPE]->(prodType:ProductType) 
WHERE shipper.InternalId = 1 
AND prodType.InternalId IN [11,3,1] 
CREATE (load:Shipment { 
     InternalId: 5, 
     NodeType: "Shipment", 
     Created: "2013-11-24T18:25:12.3179997+05:30", 
     Modified: "0001-01-01T00:00:00+00:00"}) 
RETURN distinct load AS load, shipper AS shipper 

我希望這個查詢只返回一行數據,的IN子句中定義,但返回3行作爲其創造3「載:裝運」節點使用相同的數據

我是否錯過了如何使用這個IN子句,因爲我甚至沒有使用我在這個例子的創建語句匹配?

編輯

BTW我忘了提及,我也試過如下即便如此,我結束了與多個節點

介紹With語句
MATCH (shipper:Shipper)-[:SHIPS_PRODUCT_TYPE]->(prodType:ProductType) 
WHERE shipper.InternalId = 1 
AND prodType.InternalId IN [11,3,1] 
WITH shipper, prodType 
CREATE (shipper)-[:HAS_PUBLISHED]->(load:Shipment { 
     InternalId: 5, 
     NodeType: "Shipment", 
     Created: "2013-11-24T18:25:12.3179997+05:30", 
     Modified: "0001-01-01T00:00:00+00:00"})-[:CONTAINS_PRODUCT]->(prodType) 
RETURN distinct load AS load, shipper AS shipper 

問候 基蘭

回答

1

這實際上並不需要IN。你匹配來自你最初的MATCH/WHERE的多個結果,所以它爲每個結果創建一個節點。從示例中,我甚至不知道爲什麼要進行初始查詢,因爲它根本不在第二部分中使用。我想你的意思是通過關係連接你的新節點?也許你應該查看RC1中的MERGE命令,它可以讓你「匹配或創建」節點或關係。

更新:

你可能想使用CREATE UNIQUE或合併,而不是隻創建,以避免重複節點。也許這樣的事情:

MATCH (shipper:Shipper)-[:SHIPS_PRODUCT_TYPE]->(prodType:ProductType) 
WHERE shipper.InternalId = 1 
AND prodType.InternalId IN [11,3,1] 
WITH shipper, prodType 
CREATE UNIQUE (shipper)-[:HAS_PUBLISHED]->(load:Shipment { 
    InternalId: 5, 
    NodeType: "Shipment", 
    Created: "2013-11-24T18:25:12.3179997+05:30", 
    Modified: "0001-01-01T00:00:00+00:00"}) 
WITH shipper, load, prodType 
CREATE UNIQUE (load)-[:CONTAINS_PRODUCT]->(prodType) 
RETURN distinct load AS load, shipper AS shipper 
+0

我剛剛從我的更大的查詢中提取了這個,這就是它沒有真正顯示意圖的原因。我想要做的是首先過濾並獲取所需的節點,然後創建一個新節點,然後創建與新創建的節點與其他節點的關聯。我也試圖在比賽和創造之間使用聲明,即使如此,我也得到了相同的結果。你能否幫助我理解在這種情況下究竟發生了什麼,它是否爲每個匹配路徑執行創建? – Kiran

+0

是的,它爲匹配上下文中的每個結果創建。 –

+0

在這種情況下,如何寫一個查詢來實現我所嘗試的。即我有託運人和他們處理的一系列產品,當他們發佈貨物時,他們會提供貨物中的產品。在我上面的編輯中,我試圖獲取託運人和產品,然後嘗試將其與我正在創建的新貨物相關聯。 – Kiran