sql >> Database >  >> NoSQL >> MongoDB

Hoe kopieer ik een collectie van de ene database naar een andere database op dezelfde server met PyMongo?

Na veel verwarring en zoeken naar de ziel, kon ik dit uiteindelijk opsporen tot dictaten in Python die ongeordend waren (tenminste vóór 3.6) en MongoDB een geordend BSON-woordenboek verwachtte.

Een OrderedDict gebruiken zoals aangegeven in Hoe te bestellen woordenboeken in pymongo? los dit op:

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

Een ander alternatief is het gebruik van een SON object van BSON.

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

Een andere benadering is om Javascript door te geven aan MongoDB met behulp van de eval() functie:

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

Ik vind de onbewerkte Javascript-versie minder pythonisch, maar nuttig omdat ik de MongoDB-functionaliteit kon testen zonder een MongoDB-shell te hoeven starten. Ik heb het ook niet veel genoemd over PyMongo StackOverflow-vragen, dus ik dacht dat het de moeite waard was om hier op te nemen.




  1. Hoe vaak moet ik mijn Booksleeve-verbinding openen/sluiten?

  2. Mongoose:casten naar ObjectId mislukt voor waarde

  3. Redis-replicatie gebruiken op verschillende machines (multimaster)

  4. Verwijzen naar een ander schema in Mongoose