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

एक अनुरोध के साथ किसी सरणी ऑब्जेक्ट के एकाधिक फ़ील्ड कैसे अपडेट करें?

आपको $set स्थितिगत $ के साथ ऑपरेटर दोनों मेल खाने वाली कुंजियों को अपडेट करने के लिए।

मैं वस्तु हेरफेर का आधुनिक ES6 तरीका पसंद करता हूं:

let params = { "_id" : "xxxproductid", "name" : "xxx", "img" : "yyy" };

let update = [
  { 'store.products._id': params._id },
  { "$set": Object.keys(params).filter(k => k != '_id')
    .reduce((acc,curr) =>
      Object.assign(acc,{ [`store.products.$.${curr}`]: params[curr] }),
    { })
  }
];

User.update(...update,callback);

जो MongoDB को कॉल का उत्पादन करेगा (mongoose.set('debug', true) के साथ ) चालू है इसलिए हमें अनुरोध दिखाई देता है:

जहां मूल रूप से आप अपना इनपुट params take लेते हैं और _id की आपूर्ति करें "क्वेरी" के पहले तर्क के रूप में:

  { 'store.products._id': params._id },

बाकी ऑब्जेक्ट से के माध्यम से "कुंजी" लेता है। Object.keys जो एक "सरणी" बनाता है जिसे हम Array.filter() और फिर Array पर पास करें। कम करें उन कुंजियों को ऑब्जेक्ट . में बदलने के लिए ।

.reduce() के अंदर हम Object.assign()<को कॉल करते हैं /कोड> जो इस रूप में उत्पन्न दी गई कुंजियों के साथ वस्तुओं को "विलय" करता है:

  Object.assign(acc,{ [`store.products.$.${curr}`]: params[curr] }),

ES6 कुंजी असाइनमेंट सिंटैक्स []: जो ऑब्जेक्ट लिटरल में वेरिएबल नामों की अनुमति देता है।

परिणामी "मर्ज" ऑब्जेक्ट को "रूट" ऑब्जेक्ट को असाइन करने के लिए वापस पास किया जाता है जहां $set अद्यतन की कुंजी के लिए उपयोग किया जाता है, इसलिए "जनरेटेड" कुंजियाँ अब उसी की संतान हैं।

मैं पूरी तरह से डिबगिंग उद्देश्यों के लिए तर्कों के लिए एक सरणी का उपयोग करता हूं, लेकिन फिर वह वास्तविक .update() पर क्लीनर सिंटैक्स की भी अनुमति देता है। "स्प्रेड" ... . का उपयोग करके तर्क देने के लिए ऑपरेटर:

User.update(...update,callback);

स्वच्छ और सरल, और कुछ जावास्क्रिप्ट तकनीकें जो आपको वस्तु और सरणी हेरफेर के लिए सीखनी चाहिए। अधिकतर चूंकि मोंगोडीबी क्वेरी डीएसएल मूल रूप से "ऑब्जेक्ट्स" और "एरेज़" है। इसलिए उनमें हेरफेर करना सीखें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नई मोंगो आईडी को समझें और आयरन-राउटर के साथ इसका इस्तेमाल करें

  2. php . में मोंगोडब गिनें

  3. मूल दस्तावेज़ के साथ गतिशील फ़ील्ड को कैसे फ़्लैट करें - स्प्रिंग डेटा मोंगो डीबी

  4. toGMTstring () और toUTCstring () में क्या अंतर है?

  5. मोंगोडीबी $माह