2010-09-12 18 views
5

Sadece bir ad alanı olan ve aynı zamanda line_items ile yerleşik ilişkiye sahip bir proje modelim var. mongoid :: belge alanını kapsar sınıf Projesi: isim embeds_many: line_items uçmongoid'e gömülü bir belgeyi kaldırın

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

Bu Mongo sürücü sorunun daha olduğunu varsayalım: Böyle bir belge olsaydı

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) Satır öğesini mongo konsolunda 601 kimliğine sahip olarak nasıl güncellerim?
  • 2) nasıl silebilirim?

Teşekkürler!

cevap

1

1/Güncelleme:

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

2/Sil:

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

Teşekkürler Shingara, ama bu MongoDB konsolundan değil Rails Konsolundan geliyor. Sözdiziminin mongodb için ne olduğunu biliyor musunuz? Silme işlemi için –

+0

doğru üçüncü satır mı? Çoğu durumda, gömülü öğenin kimliğini bilmezsiniz, bu nedenle muhtemelen şunları yaparsınız: line_item = pro.line_items.where (: title => "xxx") önce ve sonra bir pro.line_item_ids.delete (Satır Öğesi.id) – Nader

0

deneyin ...

Güncelleme:

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

Sil:

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

Bunun için üzgünüz, şimdi dene?

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

Ve çıkan veritabanı sorgusu/güncelleme gibi görünüyor:

+0

Teşekkürler Luckytaxi. Güncelleştirme işe yarıyor, ancak kaldırma işlemi, bir satır öğesi içeren bir projeyi 601 –

15

Güncel Mongoid (2.0.0) izin verir.

mongodb testinde [ 'listeler'] Güncelleme ({ "_ id "=> BSON :: Nesne Kimliği ('4d9522315569b11918000019')} {" $ çekme "=> {" kategoriler "=> {" _ id "=> BSON :: Nesne Kimliği ('4d9523e05569b1191800001f')}}})

Ayrıca son örneğe bakın: http://mongoid.org/docs/persistence/

Not, ActiveRecord (@ list.categories.delete (xx)) ile çalışmış olabilecek ve herhangi bir etkisi yok gibi görünen varyasyonları denedim.

0

Dene:

db.project.update ({}, {$ grubu: {line_items: []}}); Katıştırılmış belgeleri kaldırmak için, bu yalnızca içindeki verileri boş olarak sıfırlar ancak daha sonra yeniden oluşturabileceğiniz db'de boş bir nesneyi tutmaya devam eder.

+0

Hi Anand ile kaldırıyor, yanıt verdiğiniz için teşekkürler. Ben bir embeds_many derneği tüm gömülü kayıtları silmek yerine sadece bir gömülü kayıt silme aramak için düşünüyorum. Ama yine de teşekkürler! –

İlgili konular