308 votes

Comment puis-je copier une collection vers une autre base de données dans MongoDB ?

Existe-t-il un moyen simple d'y parvenir ?

392voto

Ben Points 1989

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 .

271voto

Jason McCay Points 799

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.

129voto

Anuj Gupta Points 2962

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.

29voto

wayne Points 101

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.

19voto

amenadiel Points 5675

Je le ferais d'habitude :

use sourcedatabase;
var docs=db.sourcetable.find();
use targetdatabase;
docs.forEach(function(doc) { db.targettable.insert(doc); });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X