Dans les versions antérieures de MongoDB, vous pouviez utiliser le db.collection.copyTo()
méthode pour copier une collection.
MongoDB a depuis déprécié cette méthode. De plus, à partir de la version 4.2, MongoDB a supprimé le eval
commande. Étant donné db.collection.copyTo()
enveloppe eval
, cela signifie que vous ne pouvez pas utiliser l'un ou l'autre si vous utilisez MongoDB 4.2 ou une version ultérieure.
Heureusement, il existe un autre moyen de copier une collection MongoDB.
Vérifiez les outils de base de données MongoDB
Dans MongoDB, vous pouvez cloner une collection à l'aide des outils de base de données MongoDB. Plus précisément, vous pouvez utiliser mongodump
et mongorestore
.
Les outils de base de données MongoDB sont une suite d'utilitaires de ligne de commande permettant de travailler avec MongoDB.
Si vous n'êtes pas sûr d'avoir installé les outils de base de données MongoDB, essayez d'exécuter les commandes suivantes dans votre terminal ou invite de commande pour vérifier :
mongodump --version
mongorestore --version
Cela vérifie spécifiquement le mongodump
et mongorestore
versions.
Si vous ne les avez pas, vous pouvez utiliser les instructions d'installation sur le site Web de MongoDB pour installer les outils de base de données MongoDB sur votre système.
Cloner une collection dans la même base de données
Vous devez exécuter mongodump
et mongorestore
à partir de la ligne de commande de votre système (par exemple, une nouvelle fenêtre de terminal ou d'invite de commande). Ne l'exécutez pas depuis le mongo
coquille.
Voici un exemple de code qui clone une collection dans la même base de données :
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
Dans ce cas, nous sauvegardons les pets
collecte dans le PetHotel
base de données, puis restaurez-la en tant que pets2
dans la même base de données.
Cela utilise mongodump
pour créer un fichier de sauvegarde de la collection, puis mongorestore
pour restaurer cette collection sous un nom différent. Nous l'avons fait en déversant la collection dans le flux de sortie standard et en la transférant dans mongorestore
.
Voici ce que fait chaque paramètre :
Paramètre | Description |
---|---|
--archive | Écrit la sortie dans un fichier d'archive spécifié ou, si le fichier d'archive n'est pas spécifié, écrit dans la sortie standard (stdout ). Dans notre cas, le fichier d'archive n'est pas spécifié, il a donc été écrit sur la sortie standard. |
--db | Spécifie la base de données qui contient la collection que nous voulons cloner. Dans ce cas, la base de données s'appelle PetHotel . |
--nsFrom | Spécifie la collection dans le fichier de vidage. C'est la collection que nous voulons cloner. |
--nsTo | Spécifie le nom de collection qui doit être utilisé lors de la restauration. Dans notre cas, nous l'appelons pets2 . |
Copier une collection dans une autre base de données
Vous pouvez utiliser la même technique pour copier la collection dans une autre base de données. Dans ce cas, vous n'auriez même pas besoin de changer le nom de la collection si vous ne le souhaitez pas.
Voici un exemple :
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Ceci est très similaire à l'exemple précédent, sauf que notre --nsTo
l'argument spécifie PetHouse.pets
comme collection de destination.
Cela signifie que la collection clonée s'appellera pets
, et il sera situé dans le PetHouse
base de données (au lieu de l'original PetHotel
base de données).