sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan kopierer jeg en samling fra en database til en anden database på den samme server ved hjælp af PyMongo?

Efter megen forvirring og sjælesøgning, var jeg til sidst i stand til at spore dette ned til, at diktater i Python var uordnede (i hvert fald før 3.6), og MongoDB forventede en bestilt BSON-ordbog.

Brug af en OrderedDict som angivet i Sådan bliver du bestilt ordbøger i pymongo? løse dette:

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

Et andet alternativ er at bruge en SON objekt fra BSON.

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

En anden fremgangsmåde er at sende Javascript til MongoDB ved hjælp af eval() funktion:

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

Jeg finder den rå Javascript-version mindre pytonisk, men er nyttig, fordi den tillod mig at teste MongoDB-funktionaliteten uden at skulle starte en MongoDB-skal. Jeg har heller ikke set det nævnt meget på PyMongo StackOverflow-spørgsmål, så tænkte, at det var værd at inkludere her.




  1. Mongodb - Tilføj skema til eksisterende samling

  2. Mongodb java:Perist POJO klasse med generisk felt

  3. Kan ikke få adgang til objektegenskaben for et Mongoose-svar

  4. Hvordan aktiverer jeg profilering i node-mongodb-native?