删除mongoid中的嵌入文档

时间:2010-09-12 05:12:40

标签: ruby-on-rails mongodb mongoid

我有一个只有名称字段的项目模型,并且还有与line_items的嵌入关系。       班级项目        包括mongoid :: document        字段:名称        embeds_many:line_items       端

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

我想这更像是mongo驱动程序的问题:如果我有这样的文件

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)如何在mongo控制台中更新说明ID为601的订单项?
  • 2)如何删除它?

谢谢!

4 个答案:

答案 0 :(得分:15)

当前的Mongoid(2.0.0)允许:

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

结果数据库查询/更新如下所示:

  

的MongoDB   。试验[ '列表']更新({ “_ ID”=> BSON ::的ObjectId( '4d9522315569b11918000019')}   { “$拉”=> { “类别”=> { “_ ID”=> BSON ::的ObjectId( '4d9523e05569b1191800001f')}}})

另请参阅http://mongoid.org/docs/persistence/

上的最后一个示例

请注意,我尝试过使用ActiveRecord(@ list.categories.delete(xx))的变体,这些似乎没有任何效果。

答案 1 :(得分: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

答案 2 :(得分:0)

尝试......

更新

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

删除:

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

对不起,现在试试吧?

答案 3 :(得分:0)

尝试:

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

要删除嵌入的文档,这只会将其中的数据重置为空,但仍会在数据库中保留一个空对象,以后可以重新填充。