2012-11-16 12 views
5
में वस्तुओं की एक सरणी से एक वस्तु को हटाया जा रहा

कहते हैं कि हम दस्तावेजों के निम्नलिखित संग्रह है:MongoDB

{ "_id" : ObjectId("50a69fa904c8310609600be3"), "id" : 100, "city" : "San Francisco", "friends" : [  { "id" : 1, "name" : "John" }, { "id" : 2, "name" : "Betty" },  { "id" : 3, "name" : "Harry" } ] } 
{ "_id" : ObjectId("50a69fc104c8310609600be4"), "id" : 200, "city" : "Palo Alto", "friends" : [  { "id" : 1, "name" : "Carol" },  { "id" : 2, "name" : "Frank" },  { "id" : 3, "name" : "Norman" } ] } 
{ "_id" : ObjectId("50a69fc304c8310609600be5"), "id" : 300, "city" : "Los Angeles", "friends" : [ { "id" : 1, "name" : "Fred" }, { "id" : 2, "name" : "Neal" }, { "id" : 3, "name" : "David" } ] } 
    . 
    . 
    . 

अब मान लीजिए कि फ्रैंक (पालो अल्टो, आईडी = 2) अब मेरा दोस्त है, और मैं उसे संग्रह से हटाना चाहता हूं। मैंने सोचा था कि निम्नलिखित काम हो सकता है, लेकिन यह नहीं है:

db.test.update({"city":"Palo Alto"},{"$pull":{"friends.name":"Frank"}}) 

मैं ऐसा ही कुछ ऐसा करने में सक्षम होना चाहते हैं। दस्तावेजों के संग्रह के भीतर एक सरणी के भीतर एक वस्तु हटाएं। आप यह कैसे करते हैं?

उत्तर

9

आप करीब थे। क्वेरी इस तरह होना चाहिए:

db.test.update({"city":"Palo Alto"},{"$pull":{"friends":{"name":"Frank"}}}); 

$pull एक वस्तु जिसका क्षेत्र क्षेत्र सरणी "friends" निर्दिष्ट करता है लेता है। तत्व {"name":"Frank"} खींचने के लिए तत्व ढूंढने के लिए क्वेरी (सरणी के अंदर चलाने के लिए) का प्रतिनिधित्व करता है।

+1

धन्यवाद! मैं इसे समझने की कोशिश कर घंटों तक अपने सिर को टक्कर लगी होगी। –