2012-09-03 20 views
5

¿Hay alguna manera en mongoid de encontrar y "leer" todos los documentos en una colección mientras los elimina en una consulta atómica?Buscar y eliminar todo en mongo/mongoid

Hasta el momento yo estaba usando:

Model.collection.find().to_json 
Model.delete_all 

que puede ser fácilmente roto por la adición de más datos a la colección entre esas dos instrucciones.

Respuesta

5

Podría, por ejemplo, renombrar la colección subyacente a algo así como tmp_cf20c448f824763454ada2c4b2434178. Luego, todas las nuevas escrituras irán a una nueva colección creada automáticamente con el nombre anterior, y usted puede, sin prisa y sin preocupaciones, leer todos los documentos y luego simplemente soltar esa colección temporal.

Este tipo de cosas normalmente se realiza más fácilmente utilizando el controlador de ruby ​​subyacente (10gen's mongo para mongoid 2.x o moped para mongoid 3.x).

+0

Parece una solución viable, gracias. –

+0

Bienvenido a stackoverflow :). Debe aceptar respuestas que resuelvan su problema (pequeña marca verde a la izquierda). También puedes votar grandes respuestas, esto alentará a los que responden e indicará la utilidad de la publicación a la comunidad. –

+0

Oh, no vi la marca de verificación. Traté de volver a votar, pero todavía no tengo suficientes puntos :) –

9

Hay una solución más simple para esto. Puede hacer:

Model.collection.drop 

Caerá la colección actual y creará una nueva (vacía por supuesto) con el mismo nombre.

+0

Olvidaste la parte "leer todo" :) –

Cuestiones relacionadas