2010-09-12 15 views
5

Tengo un modelo de proyectos con solo un campo de nombre y en él también la relación incrustada a line_items. proyecto de clase incluyen MongoId documento del campo :: : nombrar embeds_many: line_items finaleliminar un documento incrustado en mongoid

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

supongo que esto es más de la cuestión controlador mongo: si tuviera tal documento

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) ¿Cómo actualizo la línea de pedido con ID 601 en la consola mongo?
  • 2) ¿cómo lo elimino?

Gracias!

Respuesta

1

1/actualización:

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

2/Borrar:

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

Gracias Shingara, pero esto es de Rails Console, no de la consola MongoDB. ¿Sabes por casualidad cuál es la sintaxis para mongodb? –

+0

para la eliminación ¿es la tercera línea correcta? en la mayoría de los casos, no sabrá la ID del elemento incrustado, por lo que probablemente haga una: line_item = pro.line_items.where (: title => "xxx") primero y luego una pro.line_item_ids.delete (Elemento en linea.id) – Nader

0

Try ...

Actualización:

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

Eliminar:

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

Disculpa, prueba ahora?

+0

Gracias Luckytaxi. La actualización funciona, pero la eliminación realmente elimina los proyectos que contienen una línea de pedido con una identificación 601 –

15

Mongoid actual (2.0.0) permite:

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

Y el resultado de consulta de base de datos/actualización se parece a:.

mongodb prueba [ ''] listas de actualización ({ "_ ID "=> BSON :: oBJECTID ('4d9522315569b11918000019')}, { " pull "$ => {" categorías "=> {" _ id "=> BSON :: oBJECTID ('4d9523e05569b1191800001f')}}})

Vea también el último ejemplo en http://mongoid.org/docs/persistence/

Nota: He intentado con variaciones que habrían funcionado con ActiveRecord (@ list.categories.delete (xx)) y no parecen tener ningún efecto.

0

Probar:

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

para eliminar documentos incrustados, esto solo restablecerá los datos que contiene, pero conservará un objeto vacío en la base de datos que podrá volver a llenar más adelante.

+0

Hola Anand, gracias por dar una respuesta. Creo que estoy más buscando eliminar un solo registro incrustado en lugar de eliminar todos los registros incrustados en una asociación de embeds_many. Pero gracias de todos modos! –

Cuestiones relacionadas