2014-06-23 14 views
7

Ho un enorme database MongoDB alimentato da mongoengine in cui gli oggetti hanno una data. Per semplificare il lavoro, voglio archiviare vecchi oggetti ma tenerli da qualche parte.Archivia i vecchi dati nella Monganera

Ho letto la documentazione e ho trovato switch_db e switch_collection. Tuttavia, non posso fare nessuno dei due lavori.

In entrambi i casi, la documentazione fa riferimento a due scenari di utilizzo.

  1. Come operazione QuerySet:

    user = User.objects.get(id=user_id) 
    user.switch_collection('old-users') 
    user.save() 
    

    Il problema di questo è che funziona solo per un singolo oggetto. Non è possibile archiviare in batch più documenti.

  2. Come context_manager:

    with switch_collection(Group, 'group1') as Group: 
    Group(name="hello testdb!").save() # Saves in group1 collection 
    

    Usando questo non riesco nemmeno a fare la query, ottenendo il seguente errore:

    ValidationError (Document:None) (Field is required... 
    

Ho provato a cercare una via d' per archiviare i dati con mongoengine, ma nessuna delle opzioni sembra funzionare. Hai un suggerimento?

+1

try messo: ' dai modelli import Doc' nel tuo script di archivio –

+0

Grazie, dopo aver corretto quell'errore ne ricevo uno nuovo, credo di aver bisogno di collegarmi a un nuovo db ma non ho trovato nulla a riguardo nei documenti. – liarspocker

+0

Hai provato a verificare se la linea di connessione ('doc-archive') sta raggiungendo correttamente mongodb? –

risposta

0

Se si ha accesso all'istanza MongoDB, perché non eseguire semplicemente una query direttamente, anziché saltare attraverso i cerchi di MongoEngine?

è possibile rinominare la collezione attuale users-users-old utilizzare questo comando:

http://docs.mongodb.org/manual/reference/command/renameCollection/

e quindi eseguire un semplice script per copiare i valori più recenti verso una nuova collezione users

Problemi correlati