sql >> Databáze >  >> NoSQL >> MongoDB

Jak zkopíruji kolekci z jedné databáze do jiné databáze na stejném serveru pomocí PyMongo?

Po spoustě zmatků a hledání duše jsem to nakonec dokázal vystopovat až k diktátům v Pythonu, které nebyly uspořádané (alespoň před 3.6) a MongoDB očekával uspořádaný slovník BSON.

Použití OrderedDict, jak je uvedeno v Jak získat objednávku slovníky v pymongu? vyřešit toto:

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

Další alternativou je použití SON objekt z BSON.

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

Dalším přístupem je předání Javascriptu MongoDB pomocí eval() funkce:

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

Nezpracovaná verze Javascriptu je méně pythonic, ale je užitečná, protože mi umožnila otestovat funkčnost MongoDB, aniž bych musel spouštět shell MongoDB. Také jsem toho moc nezmiňoval v otázkách PyMongo StackOverflow, takže si myslím, že to stojí za to sem zahrnout.




  1. jak porovnat dvě pole v dokumentu v agregaci potrubí (mongoDB)

  2. Architektura pro bezpečnost:Průvodce pro MongoDB

  3. Nasazování aplikací na CDP Operational Database (COD)

  4. Synchronizace dat serveru MongoDB do místního úložiště IndexedDB