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.