MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment copier une collection d'une base de données vers une autre base de données sur le même serveur à l'aide de PyMongo ?

Après beaucoup de confusion et d'introspection, j'ai finalement pu retrouver les dicts en Python non ordonnés (au moins avant la version 3.6) et MongoDB s'attendant à un dictionnaire BSON ordonné.

Utilisation d'un OrderedDict comme indiqué dans Comment se commander dictionnaires en pymongo ? résoudre ceci :

>>> from collections import OrderedDict
>>> client.admin.command(
    OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

Une autre alternative est d'utiliser un SON objet de BSON.

>>> import bson
>>> client.admin.command(
    bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

Une autre approche consiste à transmettre Javascript à MongoDB en utilisant le eval() fonction :

>>> client.admin.eval(
    "db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})") 
{u'ok': 1.0}

Je trouve la version Javascript brute moins pythonique mais utile car elle m'a permis de tester la fonctionnalité MongoDB sans avoir à lancer un shell MongoDB. Je ne l'ai pas non plus beaucoup vu mentionné sur les questions PyMongo StackOverflow, alors j'ai pensé que cela valait la peine d'être inclus ici.