Setelah banyak kebingungan dan pencarian jiwa, saya akhirnya dapat melacak ini ke dicts di Python yang tidak berurutan (setidaknya sebelum 3.6) dan MongoDB mengharapkan kamus BSON yang dipesan.
Menggunakan OrderedDict seperti yang ditunjukkan dalam Cara memesan kamus di pymongo? selesaikan ini:
>>> from collections import OrderedDict
>>> client.admin.command(
OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
Alternatif lain adalah dengan menggunakan SON
objek dari BSON.
>>> import bson
>>> client.admin.command(
bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
Pendekatan lain adalah meneruskan Javascript ke MongoDB menggunakan eval()
fungsi:
>>> client.admin.eval(
"db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})")
{u'ok': 1.0}
Saya menemukan versi Javascript mentah kurang pythonic tetapi berguna karena memungkinkan saya untuk menguji fungsionalitas MongoDB tanpa harus menjalankan shell MongoDB. Saya juga belum melihatnya disebutkan banyak pada pertanyaan PyMongo StackOverflow, jadi saya pikir itu layak untuk disertakan di sini.