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

# MongoDB

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

## MongoDB の操作

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

### MongoDB Shell

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

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

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

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

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

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

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

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

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

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

### バックアップ／ダンプ

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

```bash
$ 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` であるという前提で実行しています。リストアはダンプと比較して、相対的に多くの時間がかかります。

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