事象
今まで自前で立てたMongoDBで問題なく動作していた
pymongo.database.Database.command("collstats", "<collection-name>")
が、Amazon DocumentDBではコレクションが存在するにも関わらず
{ "ok" : 0, "errmsg" : "Collection not found", "code" : 10 }
を返すようになってしまいました。
database – Database level operations — PyMongo 3.9.0 documentation
原因
pymongo
側を疑って無駄に時間を浪費しましたが、
そもそもDocumentDBが collstats
だとエラーにはならないものの期待した結果を返さず、 collStats
だと正しくコレクションの統計情報を返すようです。
通常のMongoDBだとどちらのコマンドでも動作します。
# mongo --ssl --host <docdb-cluster-endpoint>:27017 --sslCAFile rds-combined-ca-bundle.pem --username <username> --password <password> rs0:PRIMARY> db.runCommand({"collstats": "users"}) { "ok" : 0, "errmsg" : "Collection not found", "code" : 10 } rs0:PRIMARY> db.runCommand({"collStats": "users"}) { "ns" : "...", "count" : 1, "size" : 1490, "avgObjSize" : 1490, "storageSize" : 16384, "capped" : false, "nindexes" : 5, "totalIndexSize" : 81920, "indexSizes" : { ... }, "ok" : 1 }
対策
以下のコードに変更することでPython上でも統計情報の取得ができるようになりました。
pymongo.database.Database.command("collStats", "<collection-name>")
DocumentDBはMongo3.6互換ですが細かい差異があるようなので気をつけないとダメですね。