> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/dev/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/dev/llms-full.txt.

# MongoDB

UCIDM はエントリーや設定などのデータを [MongoDB](https://www.mongodb.com/) で管理しています。

## MongoDB の操作 \{#mongodb-operations}

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

### MongoDB Shell

[mongosh](https://www.mongodb.com/docs/mongodb-shell/) を使って直接 MongoDB のデータにアクセスできます。

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

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

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

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

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

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

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

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

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

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

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

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

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

### バックアップ／ダンプ \{#backup-dump}

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

```bash
$ 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  ...
```

### リストア／インポート \{#restore-import}

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

```bash
$ 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
```
