2010-09-12 12 views
5

में एक एम्बेडेड दस्तावेज़ को हटाएं मेरे पास सिर्फ एक नाम फ़ील्ड वाला एक प्रोजेक्ट मॉडल है और इसमें लाइन_इटम्स के साथ एम्बेडेड रिलेशनशिप भी है। वर्ग परियोजना mongoid :: दस्तावेज़ क्षेत्र में शामिल हैं: नाम embeds_many: line_items अंतmongoid

class LineItem 
    include mongoid::document 
    field :title 
    embedded_in :project, :inverse_of => :line_items 
    end 

मुझे लगता है इस मोंगो चालक सवाल का अधिक है: अगर मैं इस तरह के एक दस्तावेज़ था

db.project.find()[0] 
     { 
     _id : 123, 
     name : "housework", 
     line_items:[ 
     { title : "clean fridge", _id : 601}, 
     { title : "clean tub", _id : 602}, 
     { title : "clean oven", _id : 603} 
     ] 
     } 
  • 1) मैं मोंगो कंसोल में आईडी 601 के साथ लाइन आइटम कैसे अपडेट करूं?
  • 2) मैं इसे कैसे हटा सकता हूं?

धन्यवाद!

उत्तर

1

1/अपडेट:

pro = Project.first 
line_item = pro.line_items.find(601) 
line_item.title = 'new title' 
line_item.save 

2/हटाएँ:

pro = Project.first 
line_item = pro.line_items.find(601) 
pro.line_item_ids.delete(601) 
pro.save 
+0

धन्यवाद शिंगारा, लेकिन यह रेल कंसोल से है, मोंगोडीबी कंसोल से नहीं। क्या आपको पता है कि मोंगोडब के लिए वाक्यविन्यास क्या है? हटाने के लिए –

+0

यह है कि सही तीसरी पंक्ति है? ज्यादातर मामलों में आप एम्बेडेड आइटम की आईडी नहीं जान पाएंगे, इसलिए आप शायद एक: line_item = pro.line_items.where (: title => "xxx")। पहले और फिर pro.line_item_ids.delete (लाइन आइटम।आईडी) – Nader

0

का प्रयास करें ...

अद्यतन:

db.project.update({ line_items._id : 601 }, { $set : { line_items.title : "new title" } }) 

हटाएँ:

db.project.update({ $pull : { line_items._id : 601 } }) 

इसके बारे में क्षमा करें, इसे अभी आज़माएं?

+0

धन्यवाद लकीटाक्सी। अद्यतन काम करता है, लेकिन हटा वास्तव में एक परियोजना के साथ प्रोजेक्ट (ओं) को हटा देता है जिसमें आईडी 601 –

15

वर्तमान Mongoid (2.0.0) की अनुमति देता है:

@category = @list.categories.find(params[:id]) 
@category.delete 

और जिसके परिणामस्वरूप डेटाबेस क्वेरी/अपडेट करने लगता है:।

MongoDB परीक्षण [ 'सूचियों'] अद्यतन ({ "_ आईडी "=> BSON :: ObjectId ('4d9522315569b11918000019')} {" $ पुल "=> {" श्रेणियों "=> {" _ आईडी "=> BSON :: ObjectId ('4d9523e05569b1191800001f')}}})

http://mongoid.org/docs/persistence/

पर अंतिम उदाहरण भी देखें, मैंने इस पर विविधताएं की कोशिश की जो ActiveRecord (@ list.categories.delete (xx)) के साथ काम करता था और उन पर कोई प्रभाव नहीं पड़ता।

0

प्रयास करें:

db.project.update ({}, {$ सेट: {line_items: []}}); एम्बेडेड दस्तावेजों को हटाने के लिए

, यह केवल खाली डेटा को रीसेट करने के लिए रीसेट करेगा, लेकिन फिर भी उस डीबी में एक खाली ऑब्जेक्ट बनाए रखेगा जिसे आप बाद में दोबारा बना सकते हैं।

+0

हाय आनंद, उत्तर देने के लिए धन्यवाद। मुझे लगता है कि मैं एक एम्बेडेड_मनी एसोसिएशन में सभी एम्बेडेड रिकॉर्ड्स को हटाने के बजाय सिर्फ एक एम्बेडेड रिकॉर्ड हटाने की तलाश में हूं। लेकिन वैसे भी धन्यवाद! –