MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kopiere ich mit PyMongo eine Sammlung von einer Datenbank in eine andere Datenbank auf demselben Server?

Nach viel Verwirrung und Seelensuche konnte ich dies schließlich darauf zurückführen, dass Diktate in Python ungeordnet waren (zumindest vor 3.6) und MongoDB ein geordnetes BSON-Wörterbuch erwartete.

Verwenden eines OrderedDict, wie in How to get ordered beschrieben Wörterbücher in Pymongo? lösen Sie dies:

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

Eine weitere Alternative ist die Verwendung eines SON Objekt von BSON.

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

Ein anderer Ansatz besteht darin, Javascript mithilfe von eval() an MongoDB zu übergeben Funktion:

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

Ich finde die rohe Javascript-Version weniger pythonisch, aber nützlich, weil ich damit die MongoDB-Funktionalität testen konnte, ohne eine MongoDB-Shell starten zu müssen. Ich habe auch nicht gesehen, dass es in PyMongo StackOverflow-Fragen oft erwähnt wurde, also dachte ich, es lohnt sich, es hier aufzunehmen.