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

मान लें कि मेरे पास यह प्रश्न है:

MATCH (p:Patient) WHERE ID(p) = ({0})
MATCH (d:Drug) WHERE ID(d) IN ({1})
CREATE (p)-[:GETS]->(d)

मान लें कि उपयोगकर्ता पैरामीटर डालता है, मैं प्रत्येक (डी) नोड पर टाइमस्टैम्प रखना चाहता हूं।

यह कोशिश की:

MATCH (p:Patient) WHERE ID(p) = 1693
MATCH (d:Drug) WHERE ID(d) IN [1671, 1679]
CREATE (p)-[:GETS]->(d {givenDate: datetime()})

लेकिन मुझे त्रुटि मिलती है:

यहां लेबल या गुणों के साथ नोड 'डी' नहीं बना सकता। चर पहले ही घोषित कर दिया गया है।

ऐसा लगता है कि मैं कुछ गलत कर रहा हूं, लेकिन मैं चाहता हूं कि 1671 + 1679 दोनों को एक नई संपत्ति दी जाए, डेटटाइम के साथ दिनांक ()

0
Tsolakidis Konstantinos 27 मार्च 2020, 18:35

3 जवाब

सबसे बढ़िया उत्तर
  1. timestamp फ़ंक्शन को वापस आने के लिए प्रलेखित किया गया है:

वर्तमान समय और . के बीच मिलीसेकंड में मापा गया अंतर मध्यरात्रि, 1 जनवरी, 1970 यूटीसी। यह के बराबर है datetime().epochMillis .

  1. आपका CREATE क्लॉज वैरिएबल नाम d के साथ एक नया नोड बनाने की कोशिश कर रहा है, जिसकी अनुमति नहीं है क्योंकि d पहले से ही घोषित है (पूर्व MATCH क्लॉज द्वारा) अलग नोड। मुझे संदेह है, हालांकि, आप एक नया नोड नहीं बनाना चाहते हैं, लेकिन इसके बजाय मौजूदा d नोड में टाइमस्टैम्प जोड़ना चाहते हैं।

    यह काम करना चाहिए (और गारंटी है कि सभी Drug नोड्स एक ही datetime मान के साथ बनाए गए हैं):

    WITH datetime() AS dt
    MATCH (p:Patient) WHERE ID(p) = 1693
    MATCH (d:Drug) WHERE ID(d) IN [1671, 1679]
    SET d.givenDate = dt
    CREATE (p)-[:GETS]->(d)
    

    हालांकि, आपके समग्र दृष्टिकोण में एक बड़ी खामी है। चूंकि किसी दिए गए मूल आईडी के साथ केवल एक Drug नोड है, हर बार जब कोई अलग रोगी एक ही दवा लेता है, तो मौजूदा givenDate बदल जाएगा। datetime को GETS संबंध में रखना अधिक समझदारी होगी:

    WITH datetime() AS dt
    MATCH (p:Patient) WHERE ID(p) = 1693
    MATCH (d:Drug) WHERE ID(d) IN [1671, 1679]
    CREATE (p)-[:GETS {givenDate: dt}]->(d)
    
1
cybersam 27 मार्च 2020, 20:18
आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह काम किया। आपके नोटिस के बारे में, मैंने पहले ही इसका ध्यान रखा है। प्रत्येक नोड जिसमें :GETS संबंध है, अब मेरे खोज फ़ंक्शन में प्रकट नहीं होता है, इसलिए यह परिदृश्य संभव नहीं है।
 – 
Tsolakidis Konstantinos
27 मार्च 2020, 20:23

इसे आज़माएं (यह भी मानते हुए कि रिश्ते पर टाइमस्टैम्प लगाना बेहतर हो सकता है)

MATCH (p:Patient) WHERE ID(p) = 1693 
MATCH (d:Drug) WHERE ID(d) IN [1671, 1679] 
CREATE (p)-[r:GETS]->(d)
SET r.givenDate= datetime()

अगर आपको लगता है कि टाइमस्टैम्प d . पर होना चाहिए

SET d.givenDate= datetime()
1
Graphileon 27 मार्च 2020, 19:55

आप नए जोड़ने या नोड के मौजूदा गुणों को अपडेट करने के लिए साइबर के SET क्लॉज का उपयोग कर सकते हैं

MATCH (p:Patient) 
WHERE ID(p) = 1693 
MATCH (d:Drug) 
WHERE ID(d) IN [1671, 1679] 
SET d.givenDate = datetime()
CREATE (p)-[:GETS]->(d) 
1
TheTeacher 27 मार्च 2020, 19:55