sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kopierar jag en samling från en databas till en annan databas på samma server med PyMongo?

Efter mycket förvirring och själssökande kunde jag så småningom spåra detta till att dikter i Python var oordnade (åtminstone före 3.6) och MongoDB förväntade sig en beställd BSON-ordbok.

Använda ett OrderedDict som påpekats i Hur man blir beställd ordböcker på pymongo? lös detta:

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

Ett annat alternativ är att använda en SON objekt från BSON.

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

Ett annat tillvägagångssätt är att skicka Javascript till MongoDB med hjälp av eval() funktion:

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

Jag tycker att den råa Javascript-versionen är mindre pytonisk men är användbar eftersom den tillät mig att testa MongoDB-funktionaliteten utan att behöva starta ett MongoDB-skal. Jag har inte heller sett det nämnt mycket på PyMongo StackOverflow-frågor så jag tyckte det var värt att ta med här.




  1. Har Pymongo inbyggda valideringsregler?

  2. Hur man returnerar bara värdet i MongoDB

  3. Motsvarar ERD för MongoDB?

  4. Hur man skapar fält för automatisk ökning