MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Copia/clona una raccolta in MongoDB

Nelle versioni precedenti di MongoDB, potresti usare db.collection.copyTo() metodo per copiare una raccolta.

MongoDB da allora ha deprecato quel metodo. Inoltre, a partire dalla versione 4.2, MongoDB ha rimosso eval comando. Dato db.collection.copyTo() avvolge eval , ciò significa che non puoi utilizzare nessuno dei due se utilizzi MongoDB 4.2 o versioni successive.

Fortunatamente, c'è un altro modo per copiare una raccolta MongoDB.

Cerca gli strumenti del database MongoDB

In MongoDB, puoi clonare una raccolta utilizzando MongoDB Database Tools. In particolare, puoi utilizzare mongodump e mongorestore .

I MongoDB Database Tools sono una suite di utilità da riga di comando per lavorare con MongoDB.

Se non sei sicuro di aver installato MongoDB Database Tools, prova a eseguire i seguenti comandi nel tuo terminale o nel prompt dei comandi per verificare:

mongodump --version
mongorestore --version

Questo controlla specificamente il mongodump e mongorestore versioni.

Se non li hai, puoi utilizzare le istruzioni di installazione sul sito Web di MongoDB per installare MongoDB Database Tools sul tuo sistema.

Clone una raccolta nello stesso database

Devi eseguire mongodump e mongorestore dalla riga di comando del sistema (ad es. una nuova finestra del terminale o del prompt dei comandi). Non eseguirlo da mongo guscio.

Ecco un esempio di codice che clona una raccolta nello stesso database:

mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'

In questo caso, eseguiamo il backup di pets ritiro nel PetHotel database, quindi ripristinalo come pets2 nello stesso database.

Questo utilizza mongodump per creare un file di backup della collezione, quindi mongorestore per ripristinare quella raccolta con un nome diverso. L'abbiamo fatto scaricando la raccolta nel flusso di output standard e inserendo una pipe in mongorestore .

Ecco cosa fa ogni parametro:

Parametro Descrizione
--archive Scrive l'output in un file di archivio specificato o, se il file di archivio non è specificato, scrive nell'output standard (stdout ). Nel nostro caso, il file di archivio non è specificato, quindi è stato scritto nell'output standard.
--db Specifica il database che contiene la raccolta che vogliamo clonare. In questo caso, il database si chiama PetHotel .
--nsFrom Specifica la raccolta nel file di dump. Questa è la raccolta che vogliamo clonare.
--nsTo Specifica il nome della raccolta da utilizzare durante il ripristino. Nel nostro caso lo chiamiamo pets2 .

Copia una raccolta su un altro database

È possibile utilizzare la stessa tecnica per copiare la raccolta in un altro database. In questo caso, se non lo desideri, non dovresti nemmeno cambiare il nome della collezione.

Ecco un esempio:

mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'

Questo è molto simile all'esempio precedente, tranne per il nostro --nsTo l'argomento specifica PetHouse.pets come raccolta di destinazione.

Ciò significa che la raccolta clonata si chiamerà pets e si troverà nella PetHouse database (invece del PetHotel originale banca dati).