pymongo:findandmodify - 「いいえ、そのようなコマンドが」返されます

StackOverflow https://stackoverflow.com/questions/2350238

  •  23-09-2019
  •  | 
  •  

質問

私はそれは不可能findandupdateクエリを実行できるようになりpymongoのバグ(あるいは、少なくとも、ドキュメント)があると信じています。

ここで何が起こるかです。私は実行すると:

    result = db.command({
        'findandmodify': 'my_collection',
        'query': {'foo': 'bar'},
        'update': {'$set': {'status': 'queued'}},
    })

実際にサーバに送信されますクエリがあります:

{ 'query': {'foo': 'bar'}, 'findandmodify': 'my_collection', … }

query引数があることを第一、及びfindandmodifyある第二

しかし、これは投げるためにサーバーが発生します:

OperationFailure: command { 'query': {'foo': 'bar'}, 'findandmodify': 'my_collection', … } failed: no such cmd

サーバーを期待は(BSONのdictsは、明らかに、順序付けられている)。最初にするfindandmodifyので、

このために周りのすべての作業が?あります。

役に立ちましたか?

解決

内蔵のソートdictのタイプのmongoドライバは1が含まれていない言語の場合。 ます。http://api.mongodb SONタイプであるPythonで.ORG /パイソン/ 1.4%2B / API / pymongo / son.htmlする。あなたはすべてのコマンドのためにそれを使用する必要があります。

それはまだメイクを失敗した場合は必ずfindandmodifyの新機能であるとして、データベースの最新バージョンを使用しています。

他のヒント

一つの回避策は)コマンドのJavaScriptのバージョンを構築し、(db.evalにそれを渡すことができる。

db.eval('db.runCommand({"findandmodify": "my_collection", "query": {"foo": "bar"}, "update": {"$set": {"status": "queued"}},})')
問題は、アレックスが述べたようにあなたは、多かれ少なかれ、手動で文字列を構築する必要がありますので、Pythonのdictsには、何の秩序を持っていない、ということです。

を参照してくださいPyMongoドキュメンテーションます:

  

コマンドドキュメント内のキーの順序に注意が(重要です   「動詞」最初に来なければならない)、複数のキーを必要とするコマンドので(例えば、   findandmodify)SONのインスタンスまたは文字列とkwargsからを使用する必要があります   代わりにPythonの辞書のます。

http://api.mongodb.org/python/2.1/ API / pymongo / database.htmlする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top