MongoDB

UCIDM はデータをエントリーや設定などのデータを MongoDB で管理しています。

MongoDB の操作

運用作業などで MongoDB コンテナに同梱されているツールを直接使うときの方法を紹介します。

MongoDB Shell

mongosh を使って直接 MongoDB のデータにアクセスできます。

$ docker compose exec mongo sh -c 'mongosh "mongodb://localhost:$MONGODB_PORT_NUMBER/ucidm" \
    --authenticationDatabase "admin" \
    --username "$MONGODB_ROOT_USER" \
    --password "$MONGODB_ROOT_PASSWORD"'

コレクションのドキュメントを数える。

myrs [direct: primary] ucidm> db.account.countDocuments()
21

検索条件に一意な値を指定してドキュメントを検索する。

myrs [direct: primary] ucidm> db.user.find({"dn":"uid=user1,ou=users,dc=example,dc=com"})

正規表現 (case-insensitve) を検索条件に指定してドキュメントを検索する。

myrs [direct: primary] ucidm> db.federation.find({"destinationID": {"$regex": "LOCAL-.*", "$options": "i"}})

ドキュメントを降順にソートして確認する。

myrs [direct: primary] ucidm> db.history.find().sort({"registeredAt": -1})

バックアップ/ダンプ

mongodump コマンドを使って1つのバイナリのダンプファイルを生成します。環境変数のユーザー名とパスワードは適宜、設定した値を指定してください。デフォルトでは ucidm というデータベースを使っています。ダンプは相対的に速く完了します。定期的に実行してフルバックアップとして保管することもできます。

$ echo ${PASSWORD} | docker compose exec --no-TTY mongo \
    mongodump --authenticationDatabase admin \
              --uri "mongodb://${USERNAME}@localhost:27017" \
              --db ucidm --archive > $(date +%Y%m%d)-mongodb.dump
$ ls
20231002-mongodb.dump  ...

リストア/インポート

mongorestore コマンドを使って mongodump で取得したダンプファイルからデータベースを復元します。ここではデータベースの名前が ucidm であるという前提で実行しています。リストアはダンプと比較して、相対的に多くの時間がかかります。

$ docker compose exec --interactive --no-TTY mongo \
    mongorestore --authenticationDatabase admin \
                 --uri "mongodb://${USERNAME}:${PASSWORD}@localhost:27017" \
                 --nsInclude "ucidm.*" --archive < ./20231002-mongodb.dump