удалить внедренный документ в mongoid - PullRequest
5 голосов
/ 12 сентября 2010

У меня есть модель проектов с только полем имени, а также встроенное отношение к line_items.Класс Project включает mongoid :: document поле: name embeds_many: line_items end

  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) как мне его удалить?

Спасибо!

Ответы [ 4 ]

15 голосов
/ 01 апреля 2011

Текущий Mongoid (2.0.0) позволяет:

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

И полученный запрос / обновление базы данных выглядит так:

MONGODB test ['lists']. Update ({"_id" => BSON :: ObjectId ('4d9522315569b11918000019')}, {"$ pull" => {"Categories" => {"_ id" => BSON :: ObjectId ('4d9523e05569b1191800001f')}}}) *)1007 *

Также смотрите последний пример на http://mongoid.org/docs/persistence/

Обратите внимание, я попробовал варианты этого, которые работали бы с ActiveRecord (@ list.categories.delete (xx)), и те делаюткажется, не имеет никакого эффекта.

1 голос
/ 12 сентября 2010

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 голосов
/ 26 ноября 2012

Попробуйте:

db.project.update ({}, {$ set: {line_items: []}});

чтобы удалить встроенные документы, это только сбросит данные внутри него на пустые, но все равно сохранит пустой объект в БД, который вы можете заполнить позже.

0 голосов
/ 13 сентября 2010

Попробуйте ...

Обновление:

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

Удалить:

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

Извините, попробуйте сейчас?

...