これは、なにをしたくて書いたもの?
久しく触ってなかったMongoDBですが、ちょっと少し慣れておこうかなぁと思うところがありまして。
The most popular database for modern apps | MongoDB
今一度、インストールからやり直してみます。
環境
今回の環境は、こちら。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic $ uname -srvmpio Linux 4.15.0-88-generic #88-Ubuntu SMP Tue Feb 11 20:11:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu Linux 18.04 LTSです。
関連するドキュメントをざっと
ドキュメントサイトは、こちら。今回はMongoDB 4.2.3を使います。あと、使うのはCommunity Editionです。
The MongoDB 4.2 Manual — MongoDB Manual
ダウンロードページからOSとインストールパッケージを選んでみてもよいのですが、
Download Center: Community Server | MongoDB
Ubuntu Linuxの場合はaptリポジトリを使ってもインストール可能なようなので、こちらを使ってみましょう。
Install MongoDB Community Edition on Ubuntu — MongoDB Manual
Ubuntu Linuxのパッケージで提供されているMongoDBをインストールしている場合は、アンインストールしておいてくださいね、と。
tar.gzを使ったインストールも可能です。
Install MongoDB Community on Ubuntu using .tgz Tarball — MongoDB Manual
MongoDB Community Editionのインストールページ全体は、こちら。
Install MongoDB Community Edition — MongoDB Manual
MongoDBをaptでインストールする
それでは、MongoDBをインストールしてみます。
まずは、公開鍵のインポート。
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - OK
aptリポジトリを追加して
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse
インデックスをアップデート。
$ sudo apt update
これで、パッケージがインストール可能になります。
$ sudo apt install mongodb-org
なにがインストールされるかというと、mongos、server、shell、toolsです。
The following additional packages will be installed: mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools The following NEW packages will be installed: mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
mongodb-orgというのは、メタパッケージですね。
その他のパッケージの意味は、以下に記載があります。
MongoDB Community Edition Packages
- mongodb-org-server … mongod daemon、関連するスクリプト、設定ファイルが含まれるパッケージです
- mongodb-org-mongos … mongos daemonが含まれるパッケージです
- mongodb-org-shell … mongoシェルが含まれるパッケージです
- mongodb-org-tools … mongoimport、bsondump、mongodump、mongoexport、mongofiles、mongorestore、mongostat、mongotopが含まれるパッケージです
今回は、mongodb-orgでまるっとインストールします。
環境や起動停止に関する情報は、こちら。
ディレクトリに関しては、以下のようになっています。
また、設定ファイルは「/etc/mongod.conf」にあります。
インストールされた、MongoDBのバージョンを確認。
$ mongod --version db version v4.2.3 git version: 6874650b362138df74be53d366bbefc321ea32d4 OpenSSL version: OpenSSL 1.1.1 11 Sep 2018 allocator: tcmalloc modules: none build environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64
では、MongoDBを起動。
$ sudo systemctl start mongod
自動起動設定を有効に。
$ sudo systemctl enable mongod Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /lib/systemd/system/mongod.service.
停止。
$ sudo systemctl stop mongod
再起動。
$ sudo systemctl restart mongod
ログは、「/var/log/mongodb/mongod.log」ファイルを参照しましょう。
リッスンポートを確認。
$ sudo ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* users:(("mongod",pid=4671,fd=11)) LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=690,fd=13)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1098,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1098,fd=4))
27017ポートがMongoDBですね。ローカルからのみの接続許可になっています。
デフォルト設定を確認してみましょう。こんな感じです。
$ grep -vE '^#|^$' /etc/mongod.conf storage: dbPath: /var/lib/mongodb journal: enabled: true systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: port: 27017 bindIp: 127.0.0.1 processManagement: timeZoneInfo: /usr/share/zoneinfo
「/etc/mongod.conf」の以下の部分を変更して
# network interfaces net: port: 27017 bindIp: 127.0.0.1
外部からの接続を許可してみましょう。
# network interfaces net: port: 27017 bindIp: 0.0.0.0
再起動。
$ sudo systemctl restart mongod
確認。
$ sudo ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:27017 0.0.0.0:* users:(("mongod",pid=4799,fd=11)) LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=690,fd=13)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1098,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1098,fd=4))
バインドされるアドレスが変更されましたね。
mongoシェルで動作確認
最後に、mongoシェルで動作確認してみます。
$ mongo
データベースの切り替え。
> use book switched to db book
コレクションにデータの登録。
> db.book.insertMany([ ... { isbn: "978-4873115900", title: "MongoDBイン・アクション", price: 2680 }, ... { isbn: "978-4798045733", title: "RDB技術者のためのNoSQLガイド", price: 4059 }, ... { isbn: "978-4777519620", title: "はじめてのMongoDB", price: 2530 } ... ]) { "acknowledged" : true, "insertedIds" : [ ObjectId("5e63b16993eb04abd69b9931"), ObjectId("5e63b16993eb04abd69b9932"), ObjectId("5e63b16993eb04abd69b9933") ] }
全件取得。
> db.book.find( { } ) { "_id" : ObjectId("5e63b16993eb04abd69b9931"), "isbn" : "978-4873115900", "title" : "MongoDBイン・アクション", "price" : 2680 } { "_id" : ObjectId("5e63b16993eb04abd69b9932"), "isbn" : "978-4798045733", "title" : "RDB技術者のためのNoSQLガイド", "price" : 4059 } { "_id" : ObjectId("5e63b16993eb04abd69b9933"), "isbn" : "978-4777519620", "title" : "はじめてのMongoDB", "price" : 2530 }
3,000円以上のデータを取得。
> db.book.find( { price: { $gt: 3000 } } ) { "_id" : ObjectId("5e63b16993eb04abd69b9932"), "isbn" : "978-4798045733", "title" : "RDB技術者のためのNoSQLガイド", "price" : 4059 }
タイトルに「NoSQL」を含み、かつ3,000円以上のデータを取得。
> db.book.find( { title: /NoSQL/, price: { $gt: 3000 } } ) { "_id" : ObjectId("5e63b16993eb04abd69b9932"), "isbn" : "978-4798045733", "title" : "RDB技術者のためのNoSQLガイド", "price" : 4059 }
1件削除。
> db.book.deleteOne( { isbn: "978-4798045733" } ) { "acknowledged" : true, "deletedCount" : 1 }
確認。
> db.book.find( { } ) { "_id" : ObjectId("5e63b16993eb04abd69b9931"), "isbn" : "978-4873115900", "title" : "MongoDBイン・アクション", "price" : 2680 } { "_id" : ObjectId("5e63b16993eb04abd69b9933"), "isbn" : "978-4777519620", "title" : "はじめてのMongoDB", "price" : 2530 }
全件削除。
> db.book.remove( { } ) WriteResult({ "nRemoved" : 2 })
こんなところでしょうか。
mongoシェルに関してはチュートリアルを見つつやりましたが、
Getting Started — MongoDB Manual
リファレンスとしては、こちらですね。