2012-07-06 23 views
17

नियो 4 जे में साइफर में दो नोड्स दिए गए हैं, यदि उनके बीच कोई संबंध नहीं है, तो मैं एक की वज़न संपत्ति के साथ एक रिश्ता (प्रकार का प्रकार) बनाना चाहता हूं। यदि यह रिश्ता पहले से मौजूद है, तो मैं अपनी वज़न संपत्ति में वृद्धि करना चाहता हूं।साइफर में, यदि मैं अस्तित्व में नहीं हूं तो मैं रिश्ते कैसे बना सकता हूं; संपत्ति को अपडेट करें यदि यह

क्या एक साइफर क्वेरी में ऐसा करने का कोई अच्छा तरीका है? धन्यवाद!

संपादित करें: कुछ अतिरिक्त विवरण: नोड्स पहले ही बनाए गए हैं, अद्वितीय हैं, और एक सूचकांक में हैं।

+0

आप neo4j का एक स्नैपशॉट संस्करण का उपयोग कर के साथ ठीक हैं? Neo4j 1.8 में आप साइफर का उपयोग करके ग्राफ को अपडेट कर सकते हैं, लेकिन किसी अन्य संस्करण में नहीं। – Nicholas

+0

हां, मैं स्नैपशॉट का उपयोग कर रहा हूं। – Newtang

+0

तो अनिवार्य रूप से आप सभी नोड्स को स्कैन करना चाहते हैं और अगर कनेक्ट हो, तो वृद्धि, अगर नहीं, तो रिश्ता बनाएं? – Nicholas

उत्तर

44

यही कारण है कि हमने 1.8 में CREATE UNIQUE जोड़ा।

START a=node(...), b=node(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]-b 
SET r.weight = coalesce(r.weight?, 0) + 1 

पढ़ें के बारे में CREATE UNIQUEhere, प्रश्न चिह्न here, और here सम्मिलित अधिक।

+0

बिल्कुल सही! मुझे इसकी ही खोज थी। मैं रिलेट के बारे में जानता था, लेकिन coalesce वाक्यांश नहीं। वास्तव में क्या "?" कर? – Newtang

+0

ने नियो 4j 2.0 के बाद मैनुअल – Andres

+4

पर इंगित करने के लिए उत्तर को संपादित किया? ऑपरेटर हटा दिया गया है। देखें: http://neo4j.com/docs/snapshot/query-operators.html#query-operators-comparison –

10

एक संपत्ति के अंत में एन्ड्रेस जवाब, प्रश्न चिह्न को पूरा करने के लिए अब Neo4j 2. के साथ एक त्रुटि तो अनुरोध होगा:

MATCH a, b 
WHERE a(...) AND b(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]->b 
SET r.weight = coalesce(r.weight, 0) + 1