I have a projects model with just a name field and in it also the embedded relation to line_items. class Project include mongoid::document field :name embeds_many :line_items end
class LineItem
include mongoid::document
field :title
embedded_in :project, :inverse_of => :line_items
end
I suppose this is more of the mongo driver question: if I had such a document
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}
]
}
Thanks!
Current Mongoid (2.0.0) allows:
@category = @list.categories.find(params[:id])
@category.delete
And the resulting database query/update looks like:
MONGODB test['lists'].update({"_id"=>BSON::ObjectId('4d9522315569b11918000019')}, {"$pull"=>{"categories"=>{"_id"=>BSON::ObjectId('4d9523e05569b1191800001f')}}})
Also see the last example on http://mongoid.org/docs/persistence/
Note, I tried variations on this that would have worked with ActiveRecord (@list.categories.delete(xx)) and those do not seem to have any effect.
1/ Update :
pro = Project.first
line_item = pro.line_items.find(601)
line_item.title = 'new title'
line_item.save
2/ Delete :
pro = Project.first
line_item = pro.line_items.find(601)
pro.line_item_ids.delete(601)
pro.save
Try:
db.project.update({}, {$set: {line_items: []}});
to remove embedded documents, this will only reset the data inside it to empty but will still retain an empty object in the db which you can repopulate later on.
Try ...
Update:
db.project.update( { line_items._id : 601 }, { $set : { line_items.title : "new title" } })
Delete:
db.project.update( { $pull : { line_items._id : 601 } })
Sorry about that, try it now?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.