[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた（MongoDB Shell編）

# はじめに
Oracle Database API for MongoDBを利用することにより、MongoDBクライアント、ドライバーからAutonomous JSON Databaseにアクセスして、Autonomous JSON DatabaseをMongoDBと同じように扱うことができるようになりました。

ということで、MongoDBのクライアントであるMongoDB ShellからAutonomous JSON Databaseに接続してみました。

# 1.Computeインスタンスの作成
今回はOSとしてOracle Linux7.9を選択して、Computeインスタンスを作成しました。

# 2.MongoDBのインストールと準備
MongoDBとAutonomous JSON Databaseの比較のため、作成したComputeインスタンスにMongoDBをインストールします。

MongoDB 5.0のyumリポジトリを追加します。

```/etc/yum.repos.d/mongodb-org-5.0.repo
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
```
yum installでMongoDBをインストールします。

```
[opc@work ~]$ sudo yum install mongodb-org-5.0.5 mongodb-org-server-5.0.5 mongodb-org-shell-5.0.5 mongodb-org-mongos-5.0.5 mongodb-org-tools-5.0.5
Loaded plugins: langpacks, osmsplugin, ulninfo
This system is receiving updates from OSMS.
mongodb-org-5.0                                        | 2.5 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package mongodb-org.x86_64 0:5.0.5-1.el7 will be installed
--> Processing Dependency: mongodb-org-database for package: mongodb-org-5.0.5-1.el7.x86_64
---> Package mongodb-org-mongos.x86_64 0:5.0.5-1.el7 will be installed
---> Package mongodb-org-server.x86_64 0:5.0.5-1.el7 will be installed
---> Package mongodb-org-shell.x86_64 0:5.0.5-1.el7 will be installed
---> Package mongodb-org-tools.x86_64 0:5.0.5-1.el7 will be installed
--> Running transaction check
---> Package mongodb-org-database.x86_64 0:5.0.5-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================
 Package                 Arch      Version           Repository          Size
==============================================================================
Installing:
 mongodb-org             x86_64    5.0.5-1.el7       mongodb-org-5.0    6.1 k
 mongodb-org-mongos      x86_64    5.0.5-1.el7       mongodb-org-5.0     19 M
 mongodb-org-server      x86_64    5.0.5-1.el7       mongodb-org-5.0     28 M
 mongodb-org-shell       x86_64    5.0.5-1.el7       mongodb-org-5.0     15 M
 mongodb-org-tools       x86_64    5.0.5-1.el7       mongodb-org-5.0    6.1 k
Installing for dependencies:
 mongodb-org-database    x86_64    5.0.5-1.el7       mongodb-org-5.0    6.2 k

Transaction Summary
==============================================================================
Install  5 Packages (+1 Dependent package)

Total download size: 62 M
Installed size: 231 M
Is this ok [y/d/N]: y
Downloading packages:
(1/6): mongodb-org-database-5.0.5-1.el7.x86_64.rpm       | 6.2 kB   00:00     
(2/6): mongodb-org-5.0.5-1.el7.x86_64.rpm                | 6.1 kB   00:00     
(3/6): mongodb-org-mongos-5.0.5-1.el7.x86_64.rpm         |  19 MB   00:00     
(4/6): mongodb-org-server-5.0.5-1.el7.x86_64.rpm         |  28 MB   00:00     
(5/6): mongodb-org-shell-5.0.5-1.el7.x86_64.rpm          |  15 MB   00:00     
(6/6): mongodb-org-tools-5.0.5-1.el7.x86_64.rpm          | 6.1 kB   00:00     
------------------------------------------------------------------------------
Total                                             39 MB/s |  62 MB  00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mongodb-org-mongos-5.0.5-1.el7.x86_64                      1/6 
  Installing : mongodb-org-tools-5.0.5-1.el7.x86_64                       2/6 
  Installing : mongodb-org-server-5.0.5-1.el7.x86_64                      3/6 
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
  Installing : mongodb-org-shell-5.0.5-1.el7.x86_64                       4/6 
  Installing : mongodb-org-database-5.0.5-1.el7.x86_64                    5/6 
  Installing : mongodb-org-5.0.5-1.el7.x86_64                             6/6 
  Verifying  : mongodb-org-shell-5.0.5-1.el7.x86_64                       1/6 
  Verifying  : mongodb-org-server-5.0.5-1.el7.x86_64                      2/6 
  Verifying  : mongodb-org-tools-5.0.5-1.el7.x86_64                       3/6 
  Verifying  : mongodb-org-mongos-5.0.5-1.el7.x86_64                      4/6 
  Verifying  : mongodb-org-database-5.0.5-1.el7.x86_64                    5/6 
  Verifying  : mongodb-org-5.0.5-1.el7.x86_64                             6/6 

Installed:
  mongodb-org.x86_64 0:5.0.5-1.el7                                            
  mongodb-org-mongos.x86_64 0:5.0.5-1.el7                                     
  mongodb-org-server.x86_64 0:5.0.5-1.el7                                     
  mongodb-org-shell.x86_64 0:5.0.5-1.el7                                      
  mongodb-org-tools.x86_64 0:5.0.5-1.el7                                      

Dependency Installed:
  mongodb-org-database.x86_64 0:5.0.5-1.el7                                   

Complete!
[opc@work ~]$ 
```
MongoDBを起動します。

```
[opc@work ~]$ sudo systemctl start mongod
```
MongoDBの状態を確認します。

```
[opc@work ~]$ sudo systemctl status mongod -l
● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-01-18 19:10:35 JST; 6min ago
     Docs: https://docs.mongodb.org/manual
 Main PID: 13505 (mongod)
   CGroup: /system.slice/mongod.service
           └─13505 /usr/bin/mongod -f /etc/mongod.conf

Jan 18 19:10:34 work systemd[1]: Starting MongoDB Database Server...
Jan 18 19:10:34 work mongod[13501]: about to fork child process, waiting until server is ready for connections.
Jan 18 19:10:34 work mongod[13501]: forked process: 13505
Jan 18 19:10:35 work systemd[1]: Started MongoDB Database Server.
[opc@work ~]$
```
MongoDBが自動起動するようにします。

```
[opc@work ~]$ sudo systemctl enable mongod
```
MongoDB Shell（mongosh）からローカルのMongoDBに接続します。

```
[opc@work ~]$ mongosh
Current Mongosh Log ID:	61ea4fa3e9f03bc6f1b4a89a
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.1.9
Using MongoDB:		5.0.5
Using Mongosh:		1.1.9

For mongosh info see: https://docs.mongodb.com/mongodb-shell/


To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

------
   The server generated these startup warnings when booting:
   2022-01-21T06:15:38.931+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   2022-01-21T06:15:38.931+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
------

test>
```
データベースadminに接続します。

```
test> use admin
switched to db admin
admin> 
```
管理者ユーザadmin（パスワード：Demo#1Demo#1）を作成し、rootロールを付与します。

```
admin> db.createUser({user:"admin", pwd:"Demo#1Demo#1", roles:[{role:"root", db:"admin"}]})
{ ok: 1 }
admin>
```
作成したユーザを確認します。

```
admin> db.getUsers()
{
  users: [
    {
      _id: 'admin.admin',
      userId: UUID("63aef149-23ed-4084-99b6-0ebe25572a3a"),
      user: 'admin',
      db: 'admin',
      roles: [ { role: 'root', db: 'admin' } ],
      mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
    }
  ],
  ok: 1
}
admin>
```
MongoDB Shellを終了します。

```
admin> exit
[opc@work ~]$
```
MongoDBを停止します。

```
[opc@work ~]$ sudo systemctl stop mongod
[opc@work ~]$
```
MongoDBはデフォルトではユーザ認証が無効になっているので、ユーザ認証を有効にします。
MongoDBの設定ファイル/etc/mongod.confを開きます。

```
[opc@work ~]$ sudo vi /etc/mongod.conf
```
ファイルの末尾に以下の内容を追加します。

```/etc/mongod.conf
security:
  authorization: enabled
```
MongoDBを起動します。

```
[opc@work ~]$ sudo systemctl start mongod
[opc@work ~]$ 
```
# 3.MongoDBの操作
MongoDB ShellからローカルのMongoDBにadminユーザで接続します。

```
[opc@work ~]$ mongosh -u admin -p Demo#1Demo#1 
Current Mongosh Log ID:	61e7c76c26caf16738d30340
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB:		5.0.5
Using Mongosh:		1.1.8

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   2022-01-19T00:31:08.448+09:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
------

test>
```
データベースの一覧を確認します。

```
test> show dbs
admin    209 kB
config  61.4 kB
local   73.7 kB
test>
```

useコマンドでデータベースを作成し、データベースmongoに接続します。

```
test> use mongo
switched to db mongo
mongo>
```
コレクションdeptを作成します。

```
mongo> db.createCollection('dept')
{ ok: 1 }
mongo>
```

insertOne（）メソッドでdeptコレクションを作成し、JSONドキュメントを追加します。

```
mongo> db.dept.insertOne({"deptno":10,"deptname":"ACCOUNTING","location":"NEW YORK"})
{
  acknowledged: true,
  insertedId: ObjectId("61e7c80d8845e822d33dab38")
}
mongo> db.dept.insertOne({"deptno":20,"deptname":"RESEARCH","location":"DALLAS"})
{
  acknowledged: true,
  insertedId: ObjectId("61e7c8128845e822d33dab39")
}
mongo> db.dept.insertOne({"deptno":30,"deptname":"SALES","location":"CHICAGO"})
{
  acknowledged: true,
  insertedId: ObjectId("61e7c8158845e822d33dab3a")
}
mongo> db.dept.insertOne({"deptno":40,"deptname":"OPERATIONS","location":"BOSTON"})
{
  acknowledged: true,
  insertedId: ObjectId("61e7c8198845e822d33dab3b")
}
mongo>
```

コレクションdeptの内容を確認してみます。

```
mongo> db.dept.find()
[
  {
    _id: ObjectId("61e7c80d8845e822d33dab38"),
    deptno: 10,
    deptname: 'ACCOUNTING',
    location: 'NEW YORK'
  },
  {
    _id: ObjectId("61e7c8128845e822d33dab39"),
    deptno: 20,
    deptname: 'RESEARCH',
    location: 'DALLAS'
  },
  {
    _id: ObjectId("61e7c8158845e822d33dab3a"),
    deptno: 30,
    deptname: 'SALES',
    location: 'CHICAGO'
  },
  {
    _id: ObjectId("61e7c8198845e822d33dab3b"),
    deptno: 40,
    deptname: 'OPERATIONS',
    location: 'BOSTON'
  }
]
mongo> 
```
検索条件を指定して、deptnoが10のJSONデータを抽出してみます。

```
mongo> db.dept.find({"deptno": 10})
[
  {
    _id: ObjectId("61e7c80d8845e822d33dab38"),
    deptno: 10,
    deptname: 'ACCOUNTING',
    location: 'NEW YORK'
  }
]
mongo>
```
同様に、deptnameがSALESのJSONデータを抽出してみます。

```
mongo> db.dept.find({"deptname": "SALES"})
[
  {
    _id: ObjectId("61e7c8158845e822d33dab3a"),
    deptno: 30,
    deptname: 'SALES',
    location: 'CHICAGO'
  }
]
mongo>
```
MongoDB Shellを終了します、

```
mongo> exit
```

# 4.Autonomous JSON Databaseの作成
MongoDB ShellからアクセスするAutonomous JSON Databaseを作成します。

OCIコンソールにアクセスします。
![スクリーンショット 2022-01-19 9.39.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/722ef623-ecdc-2b04-4266-618c441a0c85.png)
コンソールメニューから「Autonomous JSON Database」にアクセスします。
「![スクリーンショット 2022-01-19 9.40.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7f66996f-01c9-19f9-b403-0aa8b58701d4.png)
「Autonomous Databaseの作成」をクリックします。
![スクリーンショット 2022-01-19 9.51.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/17e31cff-387c-0de8-102b-aaf2fee72d26.png)
Autonomous Databseの作成ウィザードが表示されます。
![スクリーンショット 2022-01-19 9.53.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1fdab310-c172-2c19-ca2a-1ff655e74ec6.png)
Autonomous JSON Databaseの表示名とデータベース名を入力します。
![スクリーンショット 2022-01-19 9.53.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a33d44c2-069b-58e9-ea5e-fffab58a7243.png)
ワークロード・タイプは「JSON」を選択します。
![スクリーンショット 2022-01-19 9.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a30d4841-d855-f7c1-dfad-03965a3c6be5.png)
ワークロード・タイプに「JSON」を選択すると、デプロイメント・タイプは共有インフラストラクチャのみとなります。
![スクリーンショット 2022-01-19 9.53.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/690c2da8-37b4-5303-72fb-27c7dd9477db.png)
データベースの構成を指定します。
![スクリーンショット 2022-01-19 9.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a6b060f2-6d13-f330-a00e-f0ed01a329bd.png)
管理者ユーザ「ADMIN」のパスワードを入力します。
![スクリーンショット 2022-01-19 9.54.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a454efc4-1390-3d51-abc2-fb351fa865bd.png)
ネットワーク・アクセスのタイプを選択します。
「すべての場所からのセキュア・アクセス」を選択します。
![スクリーンショット 2022-01-19 9.54.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f15075f6-6077-e09a-4672-9668d82c3c75.png)
Autonomous JSON Databaseではライセンス・タイプとして「ライセンス込み」のみが選択できます。
![スクリーンショット 2022-01-19 9.54.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/94329ff5-3d9b-db40-3e15-ec0b4e630406.png)
通知の送信先メールアドレスを入力します。
![スクリーンショット 2022-01-19 9.55.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a51da08b-cc68-4a4b-266b-cd32724939e6.png)
全ての入力が完了したら、「Autonomous Databaseの作成」をクリックします。
![スクリーンショット 2022-01-19 9.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/26ca7d4d-78d3-1644-ab7a-94070c5fe34f.png)
Autonomous JSON Databaseのプロビジョニングが開始されます。
![スクリーンショット 2022-01-19 9.56.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7b634239-1f1a-9a11-9c1d-43c635589f04.png)
数分待つと、Autonomous JSON Databaseが使用可能になります。
![スクリーンショット 2022-01-19 9.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a2ac7dfa-5815-9ab9-83ea-f5117d2114ad.png)

# 5.MongoDBクライアントアクセス用ユーザの作成とロールの付与
Autonomous JSON Databaseの詳細画面で「サービス・コンソール」をクリックします。
![スクリーンショット 2022-01-19 10.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/6613db49-096f-86ad-b61f-3d03ae0ee557.png)
サービス・コンソールが表示されます。
![スクリーンショット 2022-01-19 10.02.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/062e76fb-24f1-60ff-b376-edab04e241e9.png)
「開発」をクリックします。
![スクリーンショット 2022-01-19 10.02.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4618973d-dbe0-f45f-e108-abbaf8b3123a.png)
「データベース・アクション」をクリックします。
![スクリーンショット 2022-01-19 10.03.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ae62178e-d8b0-df73-a14b-5dfa702c3969.png)
ユーザー名としてadminを入力して、「次」をクリックします。
![スクリーンショット 2022-01-19 10.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7f3f9625-5c38-b4ee-dea3-530d12cb5436.png)
adminユーザーのパスワードを入力して、「サインイン」をクリックします。
![スクリーンショット 2022-01-19 10.04.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8ebc820f-54d5-ee60-0cca-0f460b374062.png)
データベース・アクションが起動しました。
![スクリーンショット 2022-01-20 8.48.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b74a032d-43c8-5b9e-82f1-6c75697c0a7a.png)
「管理」欄の「データベース・ユーザー」をクリックします。
![スクリーンショット 2022-01-20 8.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b1938282-9a86-4e1a-5aeb-b04a70c11d45.png)
ユーザー管理の画面が表示されます。
![スクリーンショット 2022-01-20 8.50.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fe82af5b-cf13-5bad-c1d7-307df300b542.png)
「ユーザーの作成」をクリックします。
![スクリーンショット 2022-01-20 8.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/59e049c1-44a9-fd36-473b-f927f0f82b3b.png)
「MONGO」ユーザーを作成します。
「Webアクセス」を有効化し、表領域の割当て制限は「UNLIMITED」とします。
![スクリーンショット 2022-01-20 8.52.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8485074d-ace0-c904-0c04-ed354286adf4.png)
「付与されたロール」タブをクリックして移動し、デフォルトで選択されている「CONNECT」、「RESOURCE」に加えて、「DWROLE」、「SODA_APP」を選択します。
最後に「ユーザーの作成」をクリックして、MONGOユーザーを作成します。
![スクリーンショット 2022-01-20 8.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/79304987-d4af-2d0e-3855-b1f996930e17.png)
![スクリーンショット 2022-01-20 8.53.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/6533fa5d-75be-4f0f-c783-5c5bdf3b09af.png)
MONGOユーザーが作成されました。
![スクリーンショット 2022-01-20 8.54.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8030be38-64bd-5a58-d721-216d0812cb11.png)

# 6.Autonomous JSON Databaseのネットワーク・アクセスの変更
Autonomous JSON Databaseの詳細画面に戻ります。
![スクリーンショット 2022-01-20 9.05.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/07b17556-1665-4c95-2343-3346f1575daa.png)
アクセス制御リストの横の「編集」をクリックします。
![スクリーンショット 2022-01-20 9.05.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3ce31349-017f-bcbd-b8d0-1f9dcfc4799b.png)
IP表記法タイプに「IPアドレス」を選択し、値にMongoDBをインストールしたサーバ（Computeインスタンス）のグローバルIPアドレスを入力します。
入力が完了したら、「変更の保存」をクリックします。
![スクリーンショット 2022-01-20 9.07.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a529c1cf-2427-e192-abf6-5b6f2a755afe.png)
Autonomous JSON Databaseが更新中になります。
![スクリーンショット 2022-01-20 9.08.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b951fe4b-e929-805c-9a00-7e399a35e45b.png)
少し待つとAutonomous JSON Databaseが使用可能になります。
ネットワークのアクセスタイプが「指定されたIPおよびVCNからのセキュアアクセスを許可」に変わり、アクセス制御リストが「有効」になります。
![スクリーンショット 2022-01-20 9.08.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8775f0f9-f4cb-3967-0934-e212ec422c20.png)

# 7.Oracle Database API for MongoDBの接続文字列の取得
「サービス・コンソール」をクリックします。
![スクリーンショット 2022-01-20 9.09.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d9cef0b9-8443-bca9-d390-8369f144f36e.png)
「開発」をクリックします。
![スクリーンショット 2022-01-20 9.14.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fe7ed112-0d93-b232-003c-1ca434841431.png)
「開発」のメニューが表示されます。
![スクリーンショット 2022-01-20 9.15.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9f08e848-2a13-6ede-65af-b0ccf47946b8.png)
画面を下までスクロールすると「Oracle Database API for MongoDB」の欄が表示されるので、こちらの接続文字列をコピーしておきます。
MongoDBクライアントからAutonomous JSON Databaseに接続する際には、こちらの接続文字列を使用します。
![スクリーンショット 2022-01-20 9.16.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7106db74-5b59-bff8-e43c-d825c0726628.png)

接続文字列は以下のような形式になっています。

新しいMongoDBクライアント/ドライバの場合

```
mongodb://[user:password@]XXXXXXXXXX.adb.<region>.oraclecloudapps.com:27017/[user]?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
```
それ以外の場合

```
mongodb://[user:password@]XXXXXXXXXX.adb.<region>.oraclecloudapps.com:27016/[user]?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false
```
# 8.MongoDB ShellからAutonomous JSON Databaseへのアクセス
準備が整ったので、MongoDB ShellからAutonomous JSON Databaseに接続してみます。
先ほどコピーした接続文字列のuserを先ほど作成したユーザー「mongo」に、passwordをmongoユーザのパスワードに置き換えて使用します。
なお、パスワードに次の文字が含まれている場合は、パーセント・エンコーディングする必要がありますので注意が必要です。

```
: / ? # [ ] @
```

```
[opc@work ~]$ mongosh 'mongodb://mongo:Demo%231Demo%231@XXXXXXXXXX.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true'
Current Mongosh Log ID:	61e8ab854e5e3b975b80c535
Connecting to:		mongodb://<credentials>@XXXXXXXXXX.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
Using MongoDB:		4.2.14
Using Mongosh:		1.1.8

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

mongo> 
```
MongoDB ShellからAutonomous JSON Databaseに接続できました。

先ほどMongoDBに対して実行した操作を同じようにやってみます。

コレクションdeptを作成します。

```
mongo> db.createCollection('dept')
{ ok: 1 }
mongo>
```
コレクションdeptが作成されました。
作成されたコレクションを確認します。

```
mongo> show collections
dept
mongo>
```
コレクションdeptにJSONデータを追加します。

```
mongo> db.dept.insertOne({"deptno":10,"deptname":"ACCOUNTING","location":"NEW YORK"})
{
  acknowledged: true,
  insertedId: ObjectId("61e8ac1472062cfd73e14ecf")
}
mongo> db.dept.insertOne({"deptno":20,"deptname":"RESEARCH","location":"DALLAS"})
{
  acknowledged: true,
  insertedId: ObjectId("61e8ac1b72062cfd73e14ed0")
}
mongo> db.dept.insertOne({"deptno":30,"deptname":"SALES","location":"CHICAGO"})
{
  acknowledged: true,
  insertedId: ObjectId("61e8ac2072062cfd73e14ed1")
}
mongo> db.dept.insertOne({"deptno":40,"deptname":"OPERATIONS","location":"BOSTON"})
{
  acknowledged: true,
  insertedId: ObjectId("61e8ac2572062cfd73e14ed2")
}
mongo> 
```
コレクションdeptの内容を確認します。

```
mongo> db.dept.find()
[
  {
    _id: ObjectId("61e8ac1472062cfd73e14ecf"),
    deptno: 10,
    deptname: 'ACCOUNTING',
    location: 'NEW YORK'
  },
  {
    _id: ObjectId("61e8ac1b72062cfd73e14ed0"),
    deptno: 20,
    deptname: 'RESEARCH',
    location: 'DALLAS'
  },
  {
    _id: ObjectId("61e8ac2072062cfd73e14ed1"),
    deptno: 30,
    deptname: 'SALES',
    location: 'CHICAGO'
  },
  {
    _id: ObjectId("61e8ac2572062cfd73e14ed2"),
    deptno: 40,
    deptname: 'OPERATIONS',
    location: 'BOSTON'
  }
]
mongo>
```
コレクションdeptから、条件を指定してJSONデータを抽出してみます。

```
mongo> db.dept.find({"deptno": 10})
[
  {
    _id: ObjectId("61e8ac1472062cfd73e14ecf"),
    deptno: 10,
    deptname: 'ACCOUNTING',
    location: 'NEW YORK'
  }
]
mongo> db.dept.find({"deptname": "SALES"})
[
  {
    _id: ObjectId("61e8ac2072062cfd73e14ed1"),
    deptno: 30,
    deptname: 'SALES',
    location: 'CHICAGO'
  }
]
mongo> 
```
MongoDBに対する操作と同じ操作がAutonomous JSON Databaseに対して実行できることが確認できました。

MongoDB Shellを終了します、

```
mongo> exit
```
# 9.SQL*Plusでの確認
SQL*PlusからAutonomous JSON Databaseに接続して、MongoDB Shellから作成したコレクションdeptがどのように見えるのかを確認してみます。

```
[opc@work ~]$ sqlplus mongo/Demo#1Demo#1@ajd1_medium

SQL*Plus: Release 19.0.0.0.0 - Production on 木 1月 20 09:31:30 2022
Version 19.11.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.

最終正常ログイン時間: 木 1月  20 2022 09:30:36 +09:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0
に接続されました。
```
テーブルを確認します。

```
SQL> col tname for a20
SQL> SELECT tname FROM tab;

TNAME
--------------------
DEPT
```
Mongo Sellから作成したコレクションdeptがテーブルとして作成されています。

deptテーブルの構造を確認してみます。

```
SQL> desc dept
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 ID					   NOT NULL VARCHAR2(255)
 CREATED_ON				   NOT NULL TIMESTAMP(6)
 LAST_MODIFIED				   NOT NULL TIMESTAMP(6)
 VERSION				   NOT NULL VARCHAR2(255)
 JSON_DOCUMENT					    BLOB
```
deptテーブルはID、CREATED_ON、LAST_MODIFIED、VERSION、JSON_DOCUMENTの5つのカラムから構成されています。

Mongo Shellから挿入したJSONデータはBLOB型のJSON_DOCUMENTに格納されているようです。
JSON_SERIALIZEを使用して、格納されているJSONデータを確認してみます。

```
SQL> set linesize 200
SQL> SELECT JSON_SERIALIZE(json_document) FROM dept;    

JSON_SERIALIZE(JSON_DOCUMENT)
--------------------------------------------------------------------------------
{"deptno":10,"deptname":"ACCOUNTING","location":"NEW YORK","_id":"61e8ac1472062cfd73e14ecf"}
{"deptno":20,"deptname":"RESEARCH","location":"DALLAS","_id":"61e8ac1b72062cfd73e14ed0"}
{"deptno":30,"deptname":"SALES","location":"CHICAGO","_id":"61e8ac2072062cfd73e14ed1"}
{"deptno":40,"deptname":"OPERATIONS","location":"BOSTON","_id":"61e8ac2572062cfd73e14ed2"}

SQL> 
```
MongoDB Shellから挿入したJSONデータがjson_document列に格納されていることが確認できました。

# 参考情報
[Oracle Help Center : Oracle Database API for MongoDB](https://docs.oracle.com/en/database/oracle/mongodb-api/mgapi/index.html)
[Oracle Help Center : Using Oracle Database API for MongoDB](https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/mongo-using-oracle-database-api-mongodb.html#GUID-8321D7A6-9DBD-44F8-8C16-1B1FBE66AC56)
[Oracle Database Insider : Oracle Database API for MongoDB](https://blogs.oracle.com/database/post/mongodb-api)
[MongoDB Documentation : Connection String Issues](https://docs.atlas.mongodb.com/troubleshoot-connection/#connection-string-issues)