2017-03-03 7 views
6

को देखते हुए बीजलेख क्वेरी के नीचेneo4j के बजाय वापस लौटाती खाली सरणी

MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
    CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c) 

आप देख सकते हैं, मैं एक नोड C 2 बातें के साथ संबंधों का होना आवश्यक है कि बना रहा हूं, कुछ नोड एक लापता मैच पर एक प्रश्न असफल b और कुछ उपयोगकर्ता।

जब आप या बी मौजूद नहीं होता है तो मुझे एक खाली सरणी मिलती है, लेकिन मैं neo4j को खाली सरणी के बजाय विफल के साथ प्रतिक्रिया देना चाहता हूं। इससे मुझे पता चल जाता है कि कौन सा नोड गायब है। क्या मैच क्लॉज कुछ भी वापस नहीं करता है जब असफल 'मजबूर' करना संभव है?

उत्तर

7

इस तरह यह काम करता है, अगर MATCH वापस शून्य हो तो क्वेरी विफल हो जाती है। यही कारण है कि उनके पास OPTIONAL MATCH उपलब्ध है ताकि शून्य वापस लौटाए जाने पर यह असफल न हो।

संपादित करें: इस

MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c) 
RETURN 'success' 

की तरह अंत में वापसी जोड़ने तो अगर आप सफलता वापस इसका मतलब है कि मिलान पाया नहीं तो फिर उसने ऐसा नहीं किया क्या इसके लिए देख रहा था पाने

संपादित करें 2:

OPTIONAL MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
with *,CASE when u is not null and b is not null then [1] else [] end as exists 
FOREACH (x in exists | CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c)) 

RETURN u,b 

तो अब हम एक वैकल्पिक मैच करते हैं, इसलिए यह नहीं मिला जब यह टूट नहीं जाता है। फिर हम एक केस स्टेटमेंट करते हैं और जहां उपयोगकर्ता और बी दोनों मौजूद हैं, हम कुछ रिश्ते बनाते हैं। और अंत में हम उपयोगकर्ता और बी को वापस कर देते हैं और जांचते हैं कि दोनों मौजूद हैं या नहीं, उनमें से किसी में कोई शून्य है या नहीं।

+0

मुझे नहीं पता कि क्वेरी से आपका क्या मतलब है विफल रहता है। मुझे 'results.records' के तहत 'बोल्ट' से एक खाली सरणी मिलती है जो मुझे परिणामों के बिना एक सफल क्वेरी है। एक खाली सरणी के बजाय मैं अगर यह क्योंकि उपयोगकर्ता विफल रहा है या बी नहीं मिला था –

+0

अंत के रूप में रिटर्न 'सफलता' जोड़ें और देखें कि कोई परिणाम वापस आ यह असफल है और यदि आप सफलता प्राप्त कर यह पाया और बनाया रिश्तों –

+0

जानने का कोई रास्ता चाहते हैं मैंने यह किया है, लेकिन विफलता के कारण होने के बारे में मैं और अधिक उत्सुक हूं। यह ग्राहक जानते हैं कि समस्या के कारण बताने के लिए मदद करता है। –