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

MongoDB/PHP:सरणी से तत्व हटाएं

एमोर,

$pull ऑपरेटर आपके द्वारा उपयोग किए जा रहे दस्तावेज़ पर काम नहीं करेगा, क्योंकि "सूचनाएं" -की वास्तव में एक सरणी नहीं है। यह एक एम्बेडेड दस्तावेज़ है, जिसमें क्रमांकित कुंजी हैं, जो इसे सतही रूप से एक सरणी के समान बनाते हैं। इस दस्तावेज़ संरचना को रखने और क्रमांकित कुंजियों का स्वचालित रूप से नाम बदलने का कोई तरीका नहीं है (जो मुझे पता है)।

अगर आप अपने दस्तावेज़ को इस तरह दिखने के लिए थोड़ा रिफलेक्टर करते हैं:

{
   "notifications": [
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "1lfw70h789u13a1e67pv"
    },
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "iwoidjsoskqp23nlwof"
    }
  ],
   "toUname": "Eamorr"
}

तत्वों को अभी भी गिना जाएगा, परोक्ष रूप से। यह अब एक सरणी है, इसलिए आप इसे मुफ्त में प्राप्त कर सकते हैं। आप इस तरह से $pull ऑपरेटर का उपयोग कर सकते हैं (मैं PHP-ड्राइवर से परिचित नहीं हूं, इसलिए मैं आपको शेल समकक्ष दे रहा हूं):

db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});

मैंने दस्तावेज़ की पहचान करने के लिए मनमाने ढंग से "toUname" कुंजी का उपयोग किया, लेकिन मुझे लगता है कि आप _id-फ़ील्ड का उपयोग करना चाहेंगे। साथ ही, मैं संदेशों की "आईडी" -की का उपयोग संदेश को सरणी से खींचने के लिए पहचानने के लिए कर रहा हूं, क्योंकि यह बहुत सुरक्षित है और सुनिश्चित करता है कि यदि आप सरणी बदल गए हैं तो आप गलती से गलत संदेश नहीं हटाते हैं आपने हटाने के लिए सरणी क्रमांक की पहचान की है।

मुझे आशा है कि यह मदद करता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब के पुराने संस्करण को कैसे हटाएं और क्लाउड 9 आईडीई में नया कैसे स्थापित करें?

  2. मोंगोडब से आने वाले सभी डेटा दिखाएं और इसे doT.js टेम्पलेटिंग इंजन में प्रस्तुत करें

  3. मोंगोडब सर्वर डीबीपाथ बदलने के बाद शुरू नहीं हो रहा है

  4. इन दो MongoDB प्रश्नों में क्या अंतर है?

  5. मोंगो कुल नेस्टेड सरणी