2014-11-18 18 views
5

Neo4j'in birleştirme, mevcut değilse yeni düğüm oluşturur. Ve iki fark olarak ON CREATE ve ON MATCH vardır. Ancak, düğüm eşleştirildiyse, düğüm oluşturulduysa farklı bilgileri döndürmenin bir yolu var mı?Neo4j birleştirme, yalnızca oluşturulduysa bir şey döndürür.

MERGE (charlie { name:'Charlie Sheen' }) 
ON CREATE SET charlie.name = 'Charlie' 
RETURN charlie 

şey gibi: ON CREATE RETURN 1, ON MERGE RETURN 0

+1

Bu sorunun yanıtını kontrol edin. http://stackoverflow.com/questions/20274979/is-it-possible-to-determine-if-a-cypher-merge-results-in-a-create-or-a-match – JohnMark13

cevap

7

bir relevant example on the merge page of the documentation var:

MERGE (keanu:Person { name:'Keanu Reeves' }) 
ON CREATE SET keanu.created = timestamp() 
ON MATCH SET keanu.lastSeen = timestamp() 
RETURN keanu.name, has(keanu.lastSeen); 

Temelde bu varlığı veya "lastSeen" özelliğinin yokluğunda 0 veya 1 bayrak saklar.

Sorunuz, "Charlie Sheen" ile eşleşen ancak daha sonra eşleştirdiğiniz değeri (name) "Charlie" olmak üzere değiştirdiğiniz bu tuhaflığa sahiptir. Bu garip - her seferinde bir değişiklik yaptığınız için, ON MATCH maddesini ekleseniz bile, asla ateşlemeyeceğiniz anlamına gelir. Her seferinde yeni oluşturursunuz, ardından değiştirirsiniz, bu sorguyu bir sonraki çalıştırmada yeni oluşturulacağını garanti edersiniz. Özel bir durum olmadığı sürece, sorgunuzun şartlarını daha sonra sorguda değiştirmek kötü bir fikir olabilir.

+0

Soruma giren cypher sadece rastgele bir örnek. Sadece bu soru için yazdım sadece. Bunu "beğen" durum güncellemesinde uygulamak istiyorum. Temel olarak, bir kullanıcının bir kullanıcı tarafından iki kez beğenilmediğinden ve sorgunun "()) bilgisine sahip olduğundan emin olmak istiyorum. Cevabınız benim sorunumu çözüyor. Teşekkürler. – pewpewlasers

İlgili konular