2016-01-17 5 views
5

Sto provando a mettere insieme un setup di test unitario con Arango. Per questo ho bisogno di essere in grado di resettare il database di test per ogni test.Come eliminare tutte le raccolte e i documenti in ArangoDb

So che possiamo eliminare direttamente un database dall'API REST ma nella documentazione è menzionato che la creazione e l'eliminazione possono "richiedere un po 'di tempo".

Questo sarebbe il modo consigliato di eseguire questo tipo di installazione oppure esiste un'istruzione AQL per fare qualcosa di simile?

risposta

4

È possibile ad esempio recuperare l'elenco di all collections (esclusi quelli di sistema) e drop o truncate. Quest'ultimo rimuoverà tutti i documenti e manterrà gli indici. In alternativa è possibile utilizzare la dichiarazione AQL REMOVE.

+0

È meglio usare il RESTO Endpoint API che hai suggerito o crea una query AQL che fa la stessa cosa? –

+0

Non sono a conoscenza del supporto per l'eliminazione o il troncamento delle raccolte direttamente in AQL, tuttavia è possibile utilizzare questa funzionalità tramite la shell Arango - https://docs.arangodb.com/Collections/CollectionMethods.html – yojimbo87

+0

Utilizzo di una singola query AQL da eliminare tutte le raccolte non funzioneranno, poiché AQL è solo per DML (manipolazione dei dati), ma non per DDL (definizione dei dati). In quanto tale, AQL non supporta l'operazione "drop collection". Pertanto, se si intende eseguire la creazione/rilascio da un'applicazione client, sarà necessario utilizzare le API RESET HTTP o la funzionalità di creazione/rilascio fornita da un driver client. – stj

2

La creazione di database potrebbe richiedere un po 'di tempo (alcuni secondi). Se questo è troppo costoso in una configurazione di test di unità che imposta e abbatte l'ambiente per ogni singolo test, vi sono le seguenti opzioni:

  • creare e cancellare un database di prova dedicato una sola volta per suite di test (che contiene test multipli) e creare/eliminare le raccolte richieste per test. Questo si è rivelato abbastanza veloce in molti casi, ma dipende da quanti test sono contenuti in ciascuna suite di test.

  • non creare e rilasciare un database di test dedicato, ma solo fare in modo che ogni test crei e rilascia le raccolte richieste. Questa è l'opzione più veloce e dovrebbe essere sufficiente se si avvia ogni prova in un nuovo database. Tuttavia richiede i test per pulire tutto correttamente. Normalmente questo non è un problema, perché i test normalmente utilizzeranno comunque raccolte dedicate. Esiste un'eccezione per i dati del grafico: la creazione di un grafico con nome memorizzerà la descrizione del grafico nella raccolta _graphs e il grafico deve essere eliminato di nuovo da lì.

1

Dopo un po 'alle prese con necessità simili ho trovato questa soluzione:

for (let col of db._collections()) { 

    if (!col.properties().isSystem) { 
     db._drop(col._name); 
    } 
}