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

MongoDB:किसी सरणी फ़ील्ड में सभी उप-दस्तावेज़ों से फ़ील्ड निकालना

आपको वह त्रुटि इसलिए मिल रही है क्योंकि आपके पास फ़िल्टर क्लॉज में कोई विधेय नहीं है। आप यह कर सकते हैं:

mongos> db.test.update({"messages.id": {$exists: true}}, {$unset: {"messages.$.id":true}}, {multi:true})

और आपको कोई त्रुटि नहीं मिलेगी - वास्तव में किसी एक दस्तावेज़ में id . होगा विशेषता हटा दी गई। समस्या यह है कि स्थितीय ऑपरेटर केवल उस सरणी के पहले तत्व से मेल खाता है जो आपके विधेय से मेल खाता है, यह सभी तत्वों से मेल नहीं खाता है। बड़ा मुद्दा यह है कि MongoDB (https में एक सरणी में सभी तत्वों को अपडेट करना वर्तमान में संभव नहीं है। ://jira.mongodb.org/browse/SERVER-1243 )।

आपको या तो संख्यात्मक स्थिति ("messages.0.id", "messages.1.id", आदि) का उपयोग करके सरणी में प्रत्येक तत्व के माध्यम से पुनरावृति करने की आवश्यकता होगी या आप सरणी को अपने एप्लिकेशन में खींच सकते हैं, लूप के माध्यम से तत्वों और उन्हें अद्यतन करें, और फिर सरणी को वापस सहेजें।

आप JIRA टिकट से देख सकते हैं कि यह मुद्दा काफी समय से खुला है लेकिन 10gen इसे बहुत उच्च प्राथमिकता नहीं मानता।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब मैप्रिडस स्कोप - संदर्भ त्रुटि

  2. क्या नियमित जावास्क्रिप्ट सरणियों को फ़िल्टर करने के लिए MongoDB क्वेरी ऑब्जेक्ट्स का उपयोग करने का कोई तरीका है?

  3. क्या अनुक्रमित कुंजियों पर कर्सर.स्किप () हमेशा तेज होता है?

  4. चर नेवला क्वेरी का उपयोग कैसे करें?

  5. एक mongodb $match के भीतर, फ़ील्ड EQUALING के बजाय MATCHING फ़ील्ड के लिए परीक्षण कैसे करें