database - {मर्ज: ट्रू} और अपडेट के साथ सेट में अंतर




firebase google-cloud-firestore (2)

"मर्ज के साथ सेट" और "अपडेट" के बीच एक और अंतर (स्केरगामी के उत्तर का विस्तार), नेस्टेड मानों के साथ काम करते समय होता है।

यदि आपके पास इस तरह का एक दस्तावेज है:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
   }
 }

और {"friend-uid-3" : true} जोड़ना चाहते हैं {"friend-uid-3" : true}

इसका उपयोग करना:

db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})

इस डेटा में परिणाम होगा:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
     "friend-uid-3": true
   }
 }

हालाँकि इस का उपयोग कर update करें:

db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })

इस डेटा में परिणाम होगा:

 `{
   "friends": {
     "friend-uid-3": true
   }
 }`

क्लाउड फायरस्टार में तीन लेखन कार्य होते हैं:

1) जोड़ें

2) सेट

3) अद्यतन

डॉक्स में यह कहा गया है कि set(object, {merge: true}) का उपयोग करके ऑब्जेक्ट को मौजूदा के साथ मर्ज किया जाएगा।

ऐसा ही तब होता है जब आप update(object) उपयोग करते हैं तो यदि कोई अंतर हो तो क्या होगा? यह अजीब लगता है कि Google तर्क की नकल करेगा।


जिस तरह से मैंने अंतर को समझा:

  • मर्ज के बिना set किसी दस्तावेज़ को अधिलेखित कर देगा या इसे बना देगा यदि यह अभी तक मौजूद नहीं है

  • मर्ज के साथ set दस्तावेज़ में फ़ील्ड्स को अपडेट करेगा या यदि मौजूद नहीं है तो इसे बनाएगा

  • update फ़ील्ड update करेगा, लेकिन यदि दस्तावेज़ मौजूद नहीं है तो विफल हो जाएगा

  • दस्तावेज़ बनाएँगे, लेकिन विफल रहेंगे यदि दस्तावेज़ पहले से मौजूद है

आपके द्वारा set और update करने के लिए दिए गए डेटा के प्रकार में भी अंतर है।

set आपको हमेशा दस्तावेज़ के आकार का डेटा देना होगा:

set(
  {a: {b: {c: true}}},
  {merge: true}
)

update साथ आप नेस्टेड मानों को अद्यतन करने के लिए फ़ील्ड पथ का भी उपयोग कर सकते हैं:

update({
  'a.b.c': true
})






google-cloud-firestore