2016-04-11 13 views
1

Cypher kullanıyorum. Aynı sorguda yenilerini oluşturmadan önce tüm ilişkilerini silmeye çalışıyorum. İlişkiler/düğümler zaten var olsaydı beklendiği gibi çalışıyorsa tuhaf bir durum var. Onlar yaratılmış olmamıştı eğer ulaşmadan:Aynı sorgudaki giden ilişkileri silme ve birleştirme

(no changes, no rows) 

Bu benim sorgu:

match (user{userId:'a'})-[r:nearby_wifi]->() delete r 
MERGE (p1:BT{userId:'a'}) WITH p1, [{bssid:"0a:18:d6:c1:3d:fd",level:"-51",timestamp:"1973-08-27 02:26:35.423",venueName:""},{bssid:"04:18:d6:c2:3e:2a",level:"-55",timestamp:"1973-08-27 02:26:35.425",venueName:""},{bssid:"0e:18:d6:c1:3d:fd",level:"-53",timestamp:"1973-08-25 11:06:07.392",venueName:""}] AS wifis 
UNWIND wifis AS wifi 
MERGE (p2:WIFI{bssid: wifi.bssid}) 
MERGE (p1)-[r1:nearby_wifi]->(p2) 
SET r1.dist=wifi.dist 
SET p1.lastTimeActive=1460378030215 
SET p2.level=wifi.level 
SET p2.timestamp=wifi.timestamp 
SET p2.venueName=wifi.venueName 

herhangi bir fikir neden silmek birleştirerek ve birleştirme infaz ben hiçbir değişiklik aldığımda (zaman grafiği boş)?

Teşekkürler.

cevap

0

ilk match ile değiştirin optional match

Örneğin

veritabanınızda hiçbir istemci düğümleri var, ama hiçbir şey elde edecek bazı kişi düğümleri sorgu

Match (p:Client) with p Match (r:Person) return * 

varsa, ancak sorgu

Optional Match (p:Client) with p Match (r:Person) return * 

size Kişileri verecektir. Bence neo4j optimizer, sonuç almaz ve optional match ile null olur ve sorgulamaya devam ettikten sonra sorgu yürütmeyi durdurur.

+0

İsteğe bağlı eşleşme hile yaptı. ama neden anladığımdan emin değilim. grafik boş olduğunda neden isteğe bağlı maç ikinci sorguyu yürütmeme izin verecek? – rayman

+0

Korkarım ki, benim bildiğim bu soruya cevap verecek kadar derin değil. Bunu pratikte buldum ve eğer bazı sorguların hiçbir şey döndürmediği (null, null değil bir şey) geri dönmeye devam etmediğini, ancak belgede bu fiture açılımını hiç aramamış olduğumu varsaydım. – Evgen

İlgili konular