序章

MongoDBは、無料でオープンソースのドキュメント指向データベースです。 従来のテーブルベースのリレーショナルデータベース構造に依存しないため、NoSQLデータベースとして分類されます。 代わりに、動的スキーマを持つJSONのようなドキュメントを使用します。 リレーショナルデータベースとは異なり、MongoDBでは、データベースにデータを追加する前に事前定義されたスキーマは必要ありません。 更新されたスキーマを使用して新しいデータベースをセットアップしなくても、いつでも必要な頻度でスキーマを変更できます。

このチュートリアルでは、CentOS7サーバーにMongoDBCommunityEditionをインストールする方法について説明します。

前提条件

このチュートリアルを実行する前に、sudo権限を持つ通常の非rootユーザーがいることを確認してください。 これらの権限を持つユーザーを設定する方法の詳細については、ガイドCentOSでSudoユーザーを作成する方法を参照してください。

ステップ1-MongoDBリポジトリを追加する

mongodb-orgパッケージは、CentOSのデフォルトリポジトリ内に存在しません。 ただし、MongoDBは専用のリポジトリを維持しています。 サーバーに追加しましょう。

viエディターを使用して、CentOSのパッケージ管理ユーティリティであるyum.repoファイルを作成します。

  1. sudo vi /etc/yum.repos.d/mongodb-org.repo

次に、MongoDBのドキュメントの Install on Red Hat セクションにアクセスし、最新の安定版リリースのリポジトリ情報をファイルに追加します。

/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

ファイルを保存して閉じます。

先に進む前に、MongoDBリポジトリがyumユーティリティ内に存在することを確認する必要があります。 repolistコマンドは、有効なリポジトリのリストを表示します。

  1. yum repolist
Output
. . . repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-3.2/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates . . .

MongoDB Repositoryを配置したら、インストールを続行します。

ステップ2–MongoDBをインストールする

yumユーティリティを使用して、サードパーティのリポジトリからmongodb-orgパッケージをインストールできます。

  1. sudo yum install mongodb-org

2つのIs this ok [y/N]:プロンプトがあります。 1つ目はMongoDBパッケージのインストールを許可し、2つ目はGPGキーをインポートします。 MongoDBの発行元はソフトウェアに署名し、yumはキーを使用してダウンロードされたパッケージの整合性を確認します。 各プロンプトで、Yと入力し、ENTERキーを押します。

次に、systemctlユーティリティを使用してMongoDBサービスを開始します。

  1. sudo systemctl start mongod

このチュートリアルでは使用しませんが、reloadおよびstopコマンドを使用してMongoDBサービスの状態を変更することもできます。

reloadコマンドは、mongodプロセスが構成ファイル/etc/mongod.confを読み取り、再起動せずに変更を適用することを要求します。

  1. sudo systemctl reload mongod

stopコマンドは、実行中のすべてのmongodプロセスを停止します。

  1. sudo systemctl stop mongod

systemctlユーティリティは、startコマンドを実行した後、結果を提供しませんでしたが、mongod.logファイルの終わりをtailコマンド:

  1. sudo tail /var/log/mongodb/mongod.log
Output
. . . [initandlisten] waiting for connections on port 27017

接続待ちの出力は、MongoDBが正常に開始され、MongoDBシェルを使用してデータベースサーバーにアクセスできることを確認します。

  1. mongo

<$>[注] ノート: MongoDBシェルを起動すると、次のような警告が表示される場合があります。

** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

MongoDBはスレッド化されたアプリケーションです。 ワークロードを処理するために追加のプロセスを起動できます。 警告は、MongoDBが最も効果的であるためには、スピンアップが許可されているプロセスの数が、任意の時点で開くことができるファイルの数の半分である必要があることを示しています。 警告を解決するには、20-nproc.confファイルを編集して、mongodprocessesソフト制限値を変更します。

  1. sudo vi /etc/security/limits.d/20-nproc.conf

ファイルの最後に次の行を追加します。

/etc/security/limits.d/20-nproc.conf
. . .
mongod soft nproc 32000

MongoDBで利用できる新しい制限については、systemctlユーティリティを使用して再起動してください。

  1. sudo systemctl restart mongod

その後、MongoDBシェルに接続すると、警告は表示されなくなります。 <$>

シェルからMongoDBを操作する方法を学ぶために、dbオブジェクトのメソッドのリストを提供するdb.help()メソッドの出力を確認できます。

  1. db.help()
Output
DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . .

mongodプロセスをバックグラウンドで実行したままにしますが、exitコマンドを使用してシェルを終了します。

  1. exit
Output
Bye

ステップ3–スタートアップの確認

データベース駆動型アプリケーションはデータベースなしでは機能できないため、MongoDBデーモンmongodがシステムで起動することを確認します。

systemctlユーティリティを使用して、起動ステータスを確認します。

  1. systemctl is-enabled mongod; echo $?

ゼロの出力は、必要なデーモンが有効になっていることを確認します。 ただし、1つは、起動しない無効化されたデーモンを確認します。

Output
. . . enabled 0

デーモンが無効になっている場合は、systemctlユーティリティを使用してデーモンを有効にします。

  1. sudo systemctl enable mongod

これで、システムの再起動後に自動的に起動するMongoDBの実行中のインスタンスができました。

ステップ4–サンプルデータセットのインポート(オプション)

他のデータベースサーバーとは異なり、MongoDBにはtestデータベースのデータが含まれていません。 本番データを使用して新しいソフトウェアを試したくないので、「Getting StartedwithMongoDB」ドキュメントの「ImportExampleDataset」セクションからサンプルデータセットをダウンロードします。 JSONドキュメントにはレストランのコレクションが含まれており、MongoDBとのやり取りを練習し、機密データに害を及ぼすことを回避するために使用します。

書き込み可能なディレクトリに移動することから始めます。

  1. cd /tmp

curlコマンドとMongoDBからのリンクを使用して、JSONファイルをダウンロードします。

  1. curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

mongoimportコマンドは、データをtestデータベースに挿入します。 --dbフラグは使用するデータベースを定義し、--collectionフラグはデータベースのどこに情報を保存するかを指定し、--fileフラグはコマンドに実行するファイルを指示します。インポートアクション:

  1. mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json

出力は、primer-dataset.jsonファイルからのデータのインポートを確認します。

Output
connected to: localhost imported 25359 documents

サンプルデータセットを配置したら、それに対してクエリを実行します。

MongoDBシェルを再起動します。

  1. mongo

シェルはデフォルトでtestデータベースを選択します。これは、データをインポートした場所です。

レストランコレクションをfind()メソッドでクエリして、データセット内のすべてのレストランのリストを表示します。 コレクションには25,000を超えるエントリが含まれているため、オプションのlimit()メソッドを使用して、クエリの出力を指定された数に減らします。 さらに、pretty()メソッドは、改行とインデントを使用して情報をより人間が読めるようにします。

  1. db.restaurants.find().limit( 1 ).pretty()
Output
{ "_id" : ObjectId("57e0443b46af7966d1c8fa68"), "address" : { "building" : "1007", "coord" : [ -73.856077, 40.848447 ], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [ { "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : "A", "score" : 2 }, { "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "A", "score" : 6 }, { "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2011-03-10T00:00:00Z"), "grade" : "B", "score" : 14 } ], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }

サンプルデータセットを引き続き使用してMongoDBに慣れるか、db.restaurants.drop()メソッドで削除できます。

  1. db.restaurants.drop()

最後に、exitコマンドでシェルを終了します。

  1. exit
Output
Bye

結論

このチュートリアルでは、yumへのサードパーティのリポジトリの追加、MongoDBデータベースサーバーのインストール、サンプルデータセットのインポート、および簡単なクエリの実行について説明しました。 MongoDBの機能の表面をかろうじてかじっただけです。 複数のコレクションを使用して独自のデータベースを作成し、それらに多数のドキュメントを入力して、堅牢なアプリケーションの構築を開始できます。