
システム開発や運用において、Amazon DocumentDB は扱いやすいドキュメント型のデータベースとして広く利用されています。
しかし、Robo3T などのツールで接続しようとすると、次のようなエラーに直面することがあります。
Failed to retrieve documents
Mongo Server error (MongoQueryException): Query failed with error code 9 with name ” and error message ‘Unrecognized field: ‘allowDiskUse’‘
この記事では、その原因と解決方法を分かりやすく解説します。
発生するエラーの内容と背景
このエラーは、Robo3T を使って DocumentDB に接続し、コレクションを開こうとしたときに発生します。
具体的には、次のようなスタックトレースが出力されます。
Mongo Server error (MongoQueryException): Query failed with error code 9 with name '' and error message 'Unrecognized field: 'allowDiskUse''
これは、「allowDiskUse」というオプションをクエリ実行時に使おうとしたところ、DocumentDB 側がそのオプションを理解できずに処理を拒否したことを示しています。
原因:バージョンの非互換性
最大の原因は、DocumentDB が MongoDB のバージョンに完全に追従していないことにあります。
DocumentDB は MongoDB 3.6 との互換性を持つとされています。
一方で、Robo3T の新しいバージョンや MongoDB クライアントは、allowDiskUse を標準でクエリに含めるようになっています(これは MongoDB 4.2以降に導入された機能です)。
つまり、クライアント側のバージョンが新しすぎることで、DocumentDB側が未対応の機能を要求されてしまい、結果としてエラーになるわけです。
解決策
Robo3Tのバージョンを見直す
まず、使用している Robo3T のバージョンを確認してください。
DocumentDBはMongoDB 3.6相当の機能しかサポートしていませんので、Robo3T 1.3.1 などの古いバージョンを使うことで解決する場合があります。
Robo3Tの旧バージョンは以下のようなページから入手可能です。
https://github.com/Studio3T/robomongo/releases
バージョンの選択に迷った場合は、MongoDB 3.6との互換性があるものを選びましょう。
MongoDB Compassの使用を検討する
MongoDB Compass は公式のGUIクライアントで、接続設定が柔軟にでき、DocumentDB に対応した設定も可能です。
Compassでの接続は以下の手順を参考にしてください。
DocumentDB用の接続設定例(Compass)
- ホスト名:
<接続エンドポイント>:27017 - 認証方式:ユーザー名/パスワード
- TLS:必須(Amazon DocumentDBはTLS接続が必須)
- TLS証明書:AWS提供の
rds-combined-ca-bundle.pemを使用
接続文字列の例は以下の通りです。
mongodb://<ユーザー名>:<パスワード>@<エンドポイント>:27017/?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false&tls=true&tlsCAFile=rds-combined-ca-bundle.pem
コマンドラインツールでの確認
GUIでの接続が難しい場合、mongoシェル で接続確認することも可能です。
mongo --host <エンドポイント>:27017 \
--ssl \
--sslCAFile rds-combined-ca-bundle.pem \
--username <ユーザー名> \
--password <パスワード> \
--authenticationDatabase admin
この方法なら「allowDiskUse」オプションを明示的に使わずにコレクション内容を確認できます。
注意点と推奨事項
DocumentDB は MongoDBと完全な互換性があるわけではないため、公式ドキュメントでサポートされている機能の一覧を確認することが大切です。
新しい機能や構文を利用する場合には、Amazon DocumentDBのバージョン制限に注意しましょう。
本番環境でのデータ確認には、安全な手段(暗号化通信、適切なアクセス権)を用いることを徹底してください。
まとめ
今回紹介したエラーは、MongoDBクライアントとDocumentDBとの機能差によって起こる典型的なトラブルです。allowDiskUse オプションが未対応であることが原因でしたが、Robo3Tのバージョンを落とすことや、MongoDB Compass などの他ツールを使うことで解決可能です。
特に現場ではGUIツールでの操作が求められることも多いため、使用するツールの互換性を事前に調査し、適切なバージョン管理を行うことが重要です。
DocumentDB と Robo3T の組み合わせに限らず、バージョンの非互換による不具合はよくあるため、常に環境を整えておく意識を持ちましょう。
- Original:https://minory.org/documentdb-robo3t-allowdiskuse.html
- Source:minory
- Author:管理者