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).