MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

यदि अद्यतन करते समय किसी संपत्ति का मूल्य शून्य है तो उस संपत्ति को रिकॉर्ड में नहीं जोड़ा जाना चाहिए

मैं इसे इस तरह नहीं लिखूंगा, लेकिन मैं आपको बताऊंगा कि आपका कोड क्यों विफल हो रहा है।

समस्या आपके $set ब्लॉक की है

आप विशेष रूप से पास किए गए अद्यतन ऑब्जेक्ट के लिए मान सेट करना चुन रहे हैं। यदि मान undefined है आप मोंगो को null . पर सेट करने के लिए मजबूर कर रहे हैं ।

ये रही समस्या

उदाहरण, डीबी में:

{
    "_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
    "name" : "firstTest",
    "nickname": "jack",
    "__v" : 0
}

अगर आप testToUpdate = { name: 'foo' } . में पास होते हैं आप के साथ समाप्त होगा

 Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}

क्योंकि आपको updatedValues.nickname मिल रहा है तर्कों से दूर और परिभाषित नहीं है

आप क्या चाहते हैं है

Test.update({ ... }, { $set: updatedValues }

जिसका अनुवाद

. में किया गया है
Test.update({ ... }, { $set: { name: 'foo' } }

अब आप प्रचलित नाम के लिए एक कुंजी प्रदान नहीं कर रहे हैं, इस प्रकार इसे अपरिभाषित/शून्य पर सेट नहीं कर रहे हैं।

मैं एक नेवला प्लगइन का उपयोग करूंगा और आपके मॉडल के लिए सभी तरह से फ़ील्ड को मैन्युअल रूप से पास करने की चिंता नहीं करूंगा (देखें github.com/autolotto/mongoose-model-update )

  • आप अद्यतन-सक्षम फ़ील्ड को परिभाषित कर सकते हैं और फिर आप बस model.update(req.body) कर सकते हैं और इस सब के बारे में चिंता न करें
  • यदि आप प्लगइन का उपयोग नहीं करना चाहते हैं तो भी आप बस Test.findByIdAndUpdate(id, { name, nickname }, callback) कर सकते हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में पुनरावर्ती दस्तावेज़ों के लिए संरचना और क्वेरी सिंटैक्स?

  2. MongoDB रेगुलर एक्सप्रेशन:एक स्ट्रिंग के अंदर एक ई-मेल समाहित करता है

  3. मोंगो क्वेरी - वस्तु की सरणी से एक विशिष्ट वस्तु प्राप्त करना (इसकी `_id` ज्ञात है) लेकिन यह सरणी भी दस्तावेजों की सूची का एक हिस्सा है

  4. MongoDB में किसी संपत्ति के आधार पर नेस्टेड सरणी ऑब्जेक्ट अपडेट करें

  5. MongoDB में स्थायित्व को समझना और सुरक्षा लिखना