मेरा यह ग्राफ है:
A<-B->C
B एक छोटे पेड़ की जड़ है। ए और बी के बीच एक संबंध है, और बी और सी के बीच एक है।
जब मैं निम्नलिखित चलाता हूं, तो एक नोड वापस आ जाता है। यह Cypher क्वेरी A और C नोड्स को वापस क्यों नहीं करती है?
MATCH(a {name:"A"})<-[]-(rewt)-[]->(c) RETURN c
ऐसा लगता है कि उस क्वेरी के पहले आधे को रूट मिलेगा, और दूसरी छमाही में दोनों बच्चे के नोड मिलेंगे।
कुछ मिनट पहले तक, मैंने सोचा होगा कि यह तार्किक रूप से निम्नलिखित क्वेरी के समान है जो काम करता है। क्या फर्क पड़ता है?
MATCH (a {name:"A"})<-[]-(rewt)
MATCH (rewt)-[]->(c)
RETURN c
साइबरस्पेस के लिए EDIT
मैंने अपने डेटाबेस को सार कर दिया है ताकि हम अपने विशिष्ट मुद्दे पर चर्चा कर सकें। अब, हमारे पास अभी भी एक छोटा पेड़ है, लेकिन 4 नोड्स हैं जो मूल के बच्चे हैं। (क्षमा करें यह अलग है, लेकिन मैं विकसित हो रहा हूं और अपने पर्यावरण को बहुत अधिक नहीं बदलना चाहता।)
यह क्वेरी सभी 4:
match(a)<-[]-(b:ROOT)-[]->(c) return c
उनमें से एक का नाम "dddd" है ...
match(a {name"dddd"})<-[]-(b:ROOT)-[]->(c) return c
यह क्वेरी उनमें से केवल तीन रिटर्न करती है। "dddd" शामिल नहीं है। हे भगवान।
साइबरसम के विशिष्ट प्रश्न का उत्तर देने के लिए, यह प्रश्न:
MATCH (a {name:"dddd"})<--(rewt:CODE_ROOT)
MATCH (rewt)-->(c)
RETURN a = c;
चार पंक्तियाँ लौटाता है। मान true, false, false, false
हैं
3 जवाब
[अपडेट]
आपके 2 प्रश्नों में अंतर है। एक MATCH
खंड सभी डुप्लिकेट संबंधों को फ़िल्टर करेगा।
इसलिए, आपकी पहली क्वेरी उन सभी मैचों को फ़िल्टर कर देगी, जहाँ बाएँ-दाएँ संबंध, दाएँ-बाएँ संबंध के समान हैं:
MATCH(a {name:"A"})<--(rewt)-->(c)
RETURN c;
आपकी दूसरी क्वेरी 2 रिश्तों को समान करने की अनुमति देती है, क्योंकि रिश्ते 2 अलग-अलग MATCH
खंडों से पाए जाते हैं:
MATCH (a {name:"A"})<--(rewt)
MATCH (rewt)-->(c)
RETURN c;
यदि मैं सही हूं, तो निम्न क्वेरी N
पंक्तियों (जहां N
} rewt
से आउटगोइंग रिलेशनशिप की संख्या है) वापस आनी चाहिए और केवल एक मान true
होना चाहिए:
MATCH (a {name:"A"})<--(rewt)
MATCH (rewt)-->(c)
RETURN a = c;
दोनों मेरे लिए ठीक काम करते हैं। मैंने 2.3.0 समुदाय पर कोशिश की है। क्या आपको अपनी क्रिएट कमांड पोस्ट करने का मन है?
प्रत्येक MATCH
खंड में, प्रत्येक संबंध केवल एक बार मिलान किया जाएगा। http://neo4j.com/docs/stable/cypherdoc-uniqueness.htmlदेखें ए> संदर्भ के लिए।
इस संबंधित प्रश्न को भी देखें: साइरो में अल्पविराम क्या करता है क्वेरी करें;
संबंधित सवाल
नए सवाल
neo4j
Neo4j एक ओपन-सोर्स ग्राफ़ डेटाबेस (GDB) है जो कनेक्टेड डेटा के अनुकूल है। प्रश्न पूछते समय कृपया Neo4j के अपने सटीक संस्करण का उल्लेख करें। आप इसका उपयोग अनुशंसा इंजन, धोखाधड़ी का पता लगाने, ग्राफ़-आधारित खोज, नेटवर्क ऑप्स / सुरक्षा और कई अन्य उपयोगकर्ता मामलों के लिए कर सकते हैं। डेटाबेस जावा, जावास्क्रिप्ट, पायथन और .NET में आधिकारिक ड्राइवरों, या पीएचपी, रूबी, आर, गोलांग, एलिक्सिर, स्विफ्ट और अधिक में सामुदायिक-योगदान वाले ड्राइवरों के माध्यम से पहुँचा है।