2012-09-03 17 views
5

C'è qualche modo in mongoid per trovare e 'leggere' tutti i documenti in una raccolta rimuovendoli anche in una query atomica?Trova e rimuovi tutto in mongo/mongoid

Finora ho usato:

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

che può essere facilmente rotto con l'aggiunta di ulteriori dati per la raccolta tra queste due istruzioni.

risposta

5

Si potrebbe, ad esempio, rinominare la raccolta sottostante a qualcosa come tmp_cf20c448f824763454ada2c4b2434178. Quindi tutte le nuove scritture andranno a una nuova raccolta creata automaticamente con il vecchio nome e potrai, senza fretta e senza preoccupazioni, leggere tutti i documenti e quindi semplicemente rilasciare quella raccolta temporanea.

Questo tipo di cose di solito è fatto più facilmente utilizzando il driver rubino sottostante (di mongo per 2.x mongoid o moped per 3.x mongoid 10gen).

+0

Sembra una soluzione valida, grazie. –

+0

Benvenuti in StackOverflow :). Devi accettare le risposte che risolvono il tuo problema (piccolo segno di spunta verde a sinistra). Inoltre, puoi invitare le risposte migliori, questo incoraggerà i rispondenti e indicherà l'utilità del post alla comunità. –

+0

Oh, non ho visto il segno di spunta. Ho provato a upvotare, ma non ho ancora abbastanza punti :) –

9

C'è una soluzione più semplice a questo. Si può fare:

Model.collection.drop 

lascerà cadere la raccolta corrente e crearne uno nuovo (vuoto naturalmente) con lo stesso nome.

+0

Hai dimenticato la parte "leggi tutto" :) –