私はMongo 2.2.0を実行しており、シャードおよびレプリケートされています.Python(pymongo 2.1.1)を使用すると、少し奇妙な動作が発生します。
注意事項:
アクセスしようとしている各データベースに、適切な権限を持つユーザーが作成されています。
以下はmongoルーター経由で接続しています。
MONGO_URI は、デプロイメントの初期段階で設定された環境変数です: $MONGO_URI = "mongodb://USER:PASSWORD@localhost:27017/DB"
mongo シェルを介して認証、読み取り、書き込みを正常に行うことができます。Python セッションを起動することもでき、次のように正常に動作します。
>>> import pymongo
>>> import os
>>> c = pymongo.Connection(os.environ['MONGODB_URI'])
>>> c.DB.COLL.insert(dict(a=2))
>>> list(c.DB.COLL.find())
しかし、挿入時に safe=True を使用すると:
>>> import pymongo
>>> import os
>>> c = pymongo.Connection(os.environ['MONGODB_URI'])
>>> c.DB.COLL.insert(dict(a=2), safe=True)
次のエラーが表示されます。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "local/lib/python2.7/site-packages/pymongo/collection.py", line 312, in insert
continue_on_error, self.__uuid_subtype), safe)
File "local/lib/python2.7/site-packages/pymongo/connection.py", line 822, in _send_message
return self.__check_response_to_last_error(response)
File "local/lib/python2.7/site-packages/pymongo/connection.py", line 759, in __check_response_to_last_error
helpers._check_command_response(error, self.disconnect)
File "local/lib/python2.7/site-packages/pymongo/helpers.py", line 128, in _check_command_response
raise OperationFailure(msg % response["errmsg"])
pymongo.errors.OperationFailure: unauthorized
私は間違った方法で何かを呼んでいますか、それともauthとsafeのバグがどこかにあるのでしょうか? 私は最初に自分のエラーを信じる傾向がありますが、insert ステートメントでセーフをオフにしておくと、正しい動作が得られます。
私はこれらのトピックを調べました:
安全な挿入のための Pymongo 権限の問題 にアクセスしようとすると、Pymongo は db アサーション エラーを発生させます
...しかし、認証を無効にする必要のない答えは見つかりませんでした。
編集:私も googlegroup に投稿し、答えを得ました。それは pymongo のバグでした。2.3 にアップグレードしたところ、すべてが期待どおりに機能しました。
https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/UlbW4942xsw