Existe-t-il un moyen simple d'y parvenir ?
Réponses
Trop de publicités?Le meilleur moyen est de faire un mongodump puis un mongorestore.
Vous pouvez sélectionner la collection via :
mongodump -d some_database -c some_collection
[En option, zippez le dump ( zip some_database.zip some_database/* -r
) et scp
il ailleurs]
Alors, restaurez-le :
mongorestore -d some_other_db -c some_or_other_collection dump/some_collection.bson
Données existantes dans some_or_other_collection
seront préservés. De cette façon, vous pouvez "ajouter" une collection d'une base de données à une autre.
Avant la version 2.4.3, vous devrez également réintégrer vos index après avoir copié vos données. À partir de la version 2.4.3, ce processus est automatique, et vous pouvez le désactiver à l'aide de la touche --noIndexRestore
.
Pour l'instant, il n'existe pas de commande dans MongoDB qui permette de faire cela. Veuillez noter le ticket JIRA avec la demande de fonctionnalité correspondante : https://jira.mongodb.org/browse/SERVER-732 .
Vous pourriez faire quelque chose comme :
db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_database>')['<collection_name>'].insert(d); });
Veuillez noter qu'avec cette méthode, les deux bases de données doivent partager le même mongod pour que cela fonctionne.
En outre, vous pouvez faire un mongodump d'une collection à partir d'une base de données et ensuite mongorestore la collection à l'autre base de données.
En fait, il y a est une commande à déplacer une collection d'une base de données à une autre. Cela ne s'appelle simplement pas "déplacer" ou "copier".
Pour copier une collection, vous pouvez la cloner sur le même db, puis déplacer le clone.
Pour cloner :
> use db1
> db.source_collection.find().forEach( function(x){db.collection_copy.insert(x)} );
A déplacer :
> use admin
switched to db admin
> db.runCommand({renameCollection: 'db1.source_collection, to: 'db2.target_collection'}) // who'd think rename could move?
Les autres réponses sont meilleures pour copier la collection, mais celle-ci est particulièrement utile si vous cherchez à la déplacer.
J'utiliserais la fonction connect de mongo cli. doc mongo . ce qui signifie que vous pouvez démarrer une ou plusieurs connexions. Si vous voulez copier la collection de clients de test à test2 sur le même serveur, vous devez d'abord lancer le shell mongo.
use test
var db2 = connect('localhost:27017/test2')
faites une recherche normale et copiez les 20 premiers enregistrements dans test2.
db.customer.find().limit(20).forEach(function(p) { db2.customer.insert(p); });
ou filtrer par certains critères
db.customer.find({"active": 1}).forEach(function(p) { db2.customer.insert(p); });
il suffit de changer le localhost en IP ou nom d'hôte pour se connecter au serveur distant. Je l'utilise pour copier des données de test dans une base de données de test pour les essais.