多くの混乱と魂の探求の後、私は最終的にこれをPythonの辞書が順序付けされていない(少なくとも3.6より前)とMongoDBが順序付けられたBSON辞書を期待していることを追跡することができました。
注文方法で指摘されているようにOrderedDictを使用するpymongoの辞書? これを解決する:
>>> from collections import OrderedDict
>>> client.admin.command(
OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
もう1つの方法は、SON
を使用することです。 BSONからのオブジェクト。
>>> import bson
>>> client.admin.command(
bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}
もう1つのアプローチは、eval()
を使用してJavascriptをMongoDBに渡すことです。 機能:
>>> client.admin.eval(
"db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})")
{u'ok': 1.0}
生のJavascriptバージョンはPythonicが少ないと思いますが、MongoDBシェルを起動せずにMongoDB機能をテストできるので便利です。また、PyMongo StackOverflowの質問であまり言及されていないので、ここに含める価値があると思いました。