2012-01-28 16 views
34

के साथ सरणी से विशिष्ट आइटम को हटा रहा है मैं कोडिनेटर और मोंगोडीबी का उपयोग कर एक वेब ऐप विकसित कर रहा हूं। उपयोगकर्ता फ़ाइलें अपलोड कर सकते हैं और अन्य उपयोगकर्ता उन पर टिप्पणी कर सकते हैं।मोंगोडीबी

मैं मुख्य फ़ाइल दस्तावेज़ में टिप्पणियों नामक एक सरणी में टिप्पणियां संग्रहीत करता हूं। यह सब ठीक है लेकिन मैं सरणी से विशिष्ट टिप्पणियों को कैसे हटा सकता हूं?

मैं आईडी के रूप में उपयोग नहीं कर सकता क्योंकि उपयोगकर्ता कई टिप्पणियां जोड़ सकता है। कैसे आप अनुशंसा करेंगे कि मैं इसे कर सकता हूं?

यह मेरी टिप्पणी सरणी है:

"comments": [ 
     { 
      "user_id": ObjectId("4f240b433dc7937d68030000"), 
      "user_name": "james", 
      "user_comment": "This is a comment", 
      "created_at": "2012-01-2821: 20: 44" 
     }, 
     { 
      "user_id": ObjectId("4f240b433dc7937d68030000"), 
      "user_name": "mandy", 
      "user_comment": "This is another comment", 
      "created_at": "2012-01-2821: 31: 07" 
     } 
    ], 

उत्तर

56

आप उपयोगकर्ता आईडी, नाम या टिप्पणी मेल द्वारा टिप्पणी आइटम की पहचान कर सकते हैं - तो आप उस टिप्पणी update() आदेश का उपयोग $pull संशोधक के साथ उचित हालत के साथ निकाल सकते हैं ।

यदि आप ऊपर के रूप में नहीं कर सकते हैं, तो टिप्पणियों में एक अद्वितीय आईडी शामिल करें (जैसे UUID)।

टिप्पणी हटाने के लिए, निम्न करें:

db.coll.update({<cond to identify document}, {$pull: {'comments': {'name': <name>}}}) 

आप आईडी है, जो पसंद किया जाता है का उपयोग करते हैं:

db.coll.update({<cond to identify document}, {$pull: {'comments': {'id': <id>}}}) 
+0

दिलचस्प लगता है। क्या मैं mongoDB को UUID असाइन कर सकता हूं? यदि हां, तो कैसे? –

+0

नहीं। आपके दस्तावेज़ के मूल्यों के लिए, इस मामले में, आपको यूयूआईडी उत्पन्न करने की आवश्यकता है। PHP में uniqid() है, जिसका आप भी उपयोग कर सकते हैं। – rsmoorthy

+0

एक पूर्ण जवाब के लिए धन्यवाद। इस पर दस्तावेज़ कमजोर हैं। – jcollum

3

हो सकता है आप अपनी 'created_at' समय से टिप्पणी को हटा सकते हैं के रूप में, समय अद्वितीय है।

$db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}}) 
+0

एकाधिक उपयोगकर्ता एक ही सेकंड में पोस्ट कर सकते हैं, हालांकि, मैं प्रत्येक टिप्पणी के लिए एक अद्वितीय आईडी उत्पन्न करूंगा। –

0

मुझे लगता है कि आपने इसे सम्मिलित करते समय प्रत्येक टिप्पणी के लिए mongodb आईडी जोड़ दी है। आप इस तरह एक नया mongodb आईडी बना सकते हैं;

$comment_id = new MongoID(); 

अब, आप $ पुल + @ smoorthy के जवाब की तरह $ अद्यतन के साथ आईडी द्वारा टिप्पणियां हटा सकते हैं।