Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MongoDB

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

MongoDB の操作

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

MongoDB Shell

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

$ docker compose exec mongo sh -c 'mongosh \
  --authenticationDatabase=admin \
  --port=$MONGODB_PORT_NUMBER \
  --username="$MONGODB_ROOT_USER" \
  --password="$MONGODB_ROOT_PASSWORD" \
  ucidm'

replica set のステータス情報を表示する。

myrs [direct: primary] ucidm> rs.status()

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

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

user コレクションのインデックス情報を表示する。

myrs [direct: primary] ucidm> db.user.getIndices()

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

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

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

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

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

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

バックアップ/ダンプ

mongodump コマンドを使って1つのバイナリのダンプファイルを生成します。compose.yml に設定している環境変数を再利用できます。デフォルトでは ucidm というデータベースを使っています。ダンプは相対的に速く完了します。定期的に実行してフルバックアップとして保管することもできます。

$ docker compose exec mongo sh -c 'mongodump \
  --authenticationDatabase=admin \
  --port=$MONGODB_PORT_NUMBER \
  --username="$MONGODB_ROOT_USER" \
  --password="$MONGODB_ROOT_PASSWORD" \
  --db=ucidm \
  --archive' > $(date +%Y%m%d)-mongodb.dump
$ ls
20231002-mongodb.dump  ...

リストア/インポート

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

$ docker compose exec --interactive --no-TTY mongo bash -c 'mongorestore \
  --authenticationDatabase=admin \
  --port=$MONGODB_PORT_NUMBER \
  --username="$MONGODB_ROOT_USER" \
  --password="$MONGODB_ROOT_PASSWORD" \
  --nsInclude="ucidm.*" \
  --archive' < path/to/20231002-mongodb.dump
Last updated on 2026-03-17 09:19 +0900 (main@799063d)