Après beaucoup de confusion et d'introspection, j'ai finalement pu retrouver les dicts en Python non ordonnés (au moins avant la version 3.6) et MongoDB s'attendant à un dictionnaire BSON ordonné.
Utilisation d'un OrderedDict comme indiqué dans Comment se commander dictionnaires en pymongo ? résoudre ceci :
>>> from collections import OrderedDict
>>> client.admin.command(
OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
Une autre alternative est d'utiliser un SON
objet de BSON.
>>> import bson
>>> client.admin.command(
bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
Une autre approche consiste à transmettre Javascript à MongoDB en utilisant le eval()
fonction :
>>> client.admin.eval(
"db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})")
{u'ok': 1.0}
Je trouve la version Javascript brute moins pythonique mais utile car elle m'a permis de tester la fonctionnalité MongoDB sans avoir à lancer un shell MongoDB. Je ne l'ai pas non plus beaucoup vu mentionné sur les questions PyMongo StackOverflow, alors j'ai pensé que cela valait la peine d'être inclus ici.