2015-01-16 12 views
6

पर ले जाएं/प्रतिलिपि बनाएँ क्या कोई नोड से दूसरे में रिश्ते को कॉपी या स्थानांतरित करने का कोई तरीका है?विभिन्न रिश्तों को विभिन्न नोड

neo4j merge 2 or multiple duplicate nodes

और यहाँ:

Copy relationships of different type using Cypher

मैं ग्राफ

(a)-[r:FOO]->(b) 
(a)<-[r2:BAR]-(c) 

मैं में इस पद्धति है कहो

मैं एक स्थिति है कि यहां के समान है तो एक और नोड, 01 है, जो (a) का डुप्लिकेट हो सकता है या नहीं। मेरी सोच यह है कि इससे कोई फर्क नहीं पड़ता कि नोड्स डुप्लीकेट हैं या कार्यक्षमता बिंदु से नहीं हैं। मैं ले जाएँ या r:FOO रिश्तों को कॉपी और r2:BAR करने में सक्षम होना चाहते हैं, ताकि ग्राफ अब भी शामिल है

(d)-[r:FOO]->(b) 
(d)<-[r2:BAR]-(c) 

अगर मैं तो यह कर रहा था नोड्स विलय करने के लिए मैं रिश्तों स्थानांतरित करने में सक्षम होना चाहते हैं जब मैं डुप्लिकेट हैं, प्रतिलिपि के विपरीत और फिर (शायद वैकल्पिक रूप से) (a) हटाएं। ध्यान दें कि एक से अधिक रिलेशनशिप प्रकार हैं और मुझे यह सुनिश्चित नहीं है कि प्रकार क्या होंगे। मुझे एहसास है कि मैं इसे चरणों में कर सकता हूं लेकिन सोचा कि अगर यह एक साइफर क्वेरी में ऐसा करने का एक प्रभावी तरीका था तो यह बहुत अच्छा होगा। मेरे वर्तमान रणनीति की तरह (सिंटेक्स सटीक नहीं लेकिन सिर्फ जानकारी देने के लिए)

// get all outgoing relationships 
MATCH (a:Label1 { title : 'blah' })-[r]->(o) 
RETURN r 
// returns FOO and BAR 

// for each relationship type, create one from (d) and copy the properties over 
MATCH (a:Label1 { title : 'blah' })-[r:FOO]->(o), (d:Label1 { title : 'blah blah' }) 
CREATE (d)-[r2:FOO]->(o) 
SET r2 = r 
...etc... 

// now do the same for incoming relationships 
MATCH (a:Label1 { title : 'blah' })<-[r]-(o) 
RETURN r 
// returns FOO and BAR 
// for each relationship type, create one from (d) and copy the properties over 
MATCH (a:Label1 { title : 'blah' })<-[r:FOO]-(o), (d:Label1 { title : 'blah blah' }) 
CREATE (d)<-[r2:FOO]-(o) 
SET r2 = r 
...etc... 

// finally delete node and relationships (if required) 
MATCH (a:Label1 { title : 'blah' })-[r]-(o) 
DELETE r, a 

हालांकि इस प्रश्नों और इसलिए लेन-देन की संख्या पर निर्भर करता है कुछ है। यह एक प्रश्न में इसे प्राप्त करने में सक्षम होने के लिए (मेरे सरल दृश्य में) बहुत बेहतर होगा। हालांकि, मुझे विश्वास नहीं है कि ऐसा कुछ भी साइफर में मौजूद है। क्या मै गलत हु?

कोई विचार? अगर यह स्पष्ट नहीं है तो मुझे बताएं और मैं आगे विस्तार और व्याख्या करने की कोशिश करूंगा।

जानकारी के लिए, मैं नियो 4j 2.1.6 समुदाय संस्करण (.NET अनुप्रयोग से neo4jclient के साथ) का उपयोग कर रहा हूं।

बस एहसास हुआ कि मुझे रिश्ते की दिशा के लिए मेरी प्रक्रिया को दोहराना होगा जब तक कि मैं गलत नहीं हूं? यानी (a) से सभी आउटगोइंग रिश्तों को प्राप्त करें, उन्हें (d) से आउटगोइंग के रूप में पुन: बनाएं, और फिर सभी आने वाले रिश्तों के लिए भी ऐसा ही करें। उपरोक्त साइफर को तदनुसार संपादित किया गया है।

अद्यतन: मुझे लगता है कि यह एक पाइप सपना है और संभव नहीं है। क्या कोई इसकी पुष्टि कर सकता है? एक निश्चित जवाब होना अच्छा होगा, भले ही यह "नहीं!" है। यदि ऐसा है तो मैं Neo4j लोगों से पूछने पर विचार करूंगा कि यह कार्यक्षमता भी व्यवहार्य और विचार करने योग्य है।

अद्यतन 2: विचारों की कमी से मुझे लगता है कि यह नहीं किया जा सकता है। मुझे निश्चित रूप से मेरे शोध या प्रयोग में आगे नहीं मिला है। ऐसा लगता है कि एक फीचर अनुरोध जाने का तरीका है। मैं एकमात्र ऐसा व्यक्ति नहीं हो सकता जो इस कार्यक्षमता को असाधारण रूप से उपयोगी लगे।

+0

यह सुविधा अच्छी होगी। मैं (सोचता हूं) मैंने इसे http://stackoverflow.com/questions/32628783/cypher-query-to-take-all-relationships-from-one-node-and-attach-them-to-another –

उत्तर

1

मुझे लगता है कि तुम सिर्फ इन एक साथ श्रृंखला कर सकते हैं:

// get all relationships 
MATCH 
    (a:Label1 { title : 'blah' })-[r]-(o), 
    (d:Label1 { title : 'blah blah' }) 
CREATE (d)-[r2:type(r)]-(o) 
DELETE r, a 

केवल एक चीज मैं पूरी तरह के बारे में यकीन नहीं है type() समारोह जहां यह वहाँ इस्तेमाल किया जा रहा उपयोग करने की क्षमता है।मैं इसे आजमाऊंगा

+0

पर डुप्लीकेट किया होगा धन्यवाद। देखने में रुचि रखते हैं। मुझे 'टाइप (आर)' के साथ जाना पड़ा लेकिन असफल रहा - जिस तरह से मैं इसका इस्तेमाल कर रहा था। मुझे चेनिंग का विचार पसंद है अगर यह काम कर सकता है। – ceej

+0

हाँ, मुझे एक ही समस्या थी। मुझे नहीं लगता कि यह संभव है। 'SET' का उपयोग करने का एक तरीका हो सकता है, लेकिन मैं इस समय इसे नहीं देख रहा हूं। आप –

+0

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

संबंधित मुद्दे