मेरे पास स्प्रिंग बूट ऐप है जहां मैंने कुछ प्रश्नों को परिभाषित किया है। उनमें से मैं चाहता हूं कि एक निश्चित क्वेरी निकाल दिए जाने पर डेटाबेस टाइमस्टैम्प को ट्रैक करे और इसे नोड की संपत्ति में संग्रहीत करे। एक फ़ंक्शन टाइमस्टैम्प() है, लेकिन मैं दस्तावेज़ों में नहीं ढूंढ सकता कि यह किस प्रकार के तर्क लेता है और इसका सही तरीके से उपयोग कैसे करें।
मान लें कि मेरे पास यह प्रश्न है:
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 दोनों को एक नई संपत्ति दी जाए, डेटटाइम के साथ दिनांक ()
3 जवाब
- timestamp फ़ंक्शन को वापस आने के लिए प्रलेखित किया गया है:
वर्तमान समय और . के बीच मिलीसेकंड में मापा गया अंतर मध्यरात्रि, 1 जनवरी, 1970 यूटीसी। यह के बराबर है datetime().epochMillis .
आपका
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)
इसे आज़माएं (यह भी मानते हुए कि रिश्ते पर टाइमस्टैम्प लगाना बेहतर हो सकता है)
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()
आप नए जोड़ने या नोड के मौजूदा गुणों को अपडेट करने के लिए साइबर के 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)
संबंधित सवाल
नए सवाल
neo4j
Neo4j एक ओपन-सोर्स ग्राफ़ डेटाबेस (GDB) है जो कनेक्टेड डेटा के अनुकूल है। प्रश्न पूछते समय कृपया Neo4j के अपने सटीक संस्करण का उल्लेख करें। आप इसका उपयोग अनुशंसा इंजन, धोखाधड़ी का पता लगाने, ग्राफ़-आधारित खोज, नेटवर्क ऑप्स / सुरक्षा और कई अन्य उपयोगकर्ता मामलों के लिए कर सकते हैं। डेटाबेस जावा, जावास्क्रिप्ट, पायथन और .NET में आधिकारिक ड्राइवरों, या पीएचपी, रूबी, आर, गोलांग, एलिक्सिर, स्विफ्ट और अधिक में सामुदायिक-योगदान वाले ड्राइवरों के माध्यम से पहुँचा है।