MongoDB とは何か、インストール ガイド、基本操作について説明します。
MongoDB NoSQL はこれまで以上にトレンドになっています。必要な理解はできていますか?
そうでなくても心配する必要はありません。次のことが役に立ちます。
導入
Web サイトが動的コンテンツへのパラダイム シフトを遂げるにつれて、No-SQL データベースの需要が高まりました。これにより、 MongoDB のような多数の No-SQL データベースが誕生しました。
No-SQL データベースとして分類される MongoDB は、ドキュメントごとに自動生成された識別子を使用して JSON ドキュメントの形式でデータを保存するドキュメント ベースのデータベースです。
No-SQL データベースは、構造化 SQL データベースとは異なり、テーブル構造が固定されていないデータベースです。 MongoDB は、特定の列の属性の数や属性の名前に関係なく、データを JSON 文字列の形式で保存します。
これにより、開発者はデータベース レベルを変更することなく、エンティティに迅速に変更を加えることができます。
MongoDB のインストール
MongoDB は、他のデータベースと同様、開発ニーズに応じて複数のバリエーションが用意されています。バリアントは以下にリストされており、この リンク から使用またはダウンロードできます。
- MongoDB Atlas – サービスとしてのデータベース
- Community Server – 開発者のコミュニティに無料で使用できます
- MongoDB Enterprise Edition – 追加機能を備えた商用バージョン
これらはそれぞれ、あらゆるオペレーティング システムと完全に互換性があります。まず、コミュニティ サーバーのインストールを開始し、オペレーティング システムに応じて関連するインストール ファイルをダウンロードします。
インストール プロセスはオペレーティング システムごとに若干異なるため、各オペレーティング システムのインストールを個別に実行します。
MacOS へのインストール
MacOS に MongoDB をインストールするには。必要なバイナリを含む .tgz アーカイブをダウンロードします。ファイルを解凍すると、 bin フォルダーにある多数のバイナリを表示できるようになります。
- bin フォルダーを目的の場所に移動します
- ターミナルを開き、ディレクトリを上記の bin ディレクトリに変更します。
- 以下のコマンドを実行して、任意の場所にデータベースを作成します。
$ ./mongod --dbpath /path-to-desired-directory/
上記のコマンドで、ディレクトリへのパスを希望のパスに置き換えると、コマンドが実行されるとすぐにサーバーが起動します。
Windows へのインストール
MongoDB ダウンロード センターは、MongoDB を Windows にインストールするための実行可能 .msi パッケージを提供します。 Windows でのインストールは非常に簡単で、セットアップをダウンロードしたら、いくつかのコマンドを使用して実行できます。
- 以下のコマンドを実行して、Windows PC/サーバーにMongoDBをインストールします。
> cd /setup-folder/
> msiexec.exe /q /i .msi ^
INSTALLLOCATION="C:Program FilesMongoDB" ^
ADDLOCAL="MonitoringTools,ImportExportTools,MiscellaneousTools"
上記のコマンドを実行すると、対応するディレクトリに移動し、指定された場所にインストールするためのセットアップが実行されます。インストールしたら、MongoDB のデフォルトのデータベース ストレージ パスを構成する必要があります。
以下のコマンドは、同じ設定を行うのに役立ちます。
> md dbdata
上記のコマンドは、コマンド プロンプトが現在指しているディレクトリに db/data フォルダーを作成します。データベースを再度再構成する必要がある場合は、以下に示すように、 dbpath 引数を指定して mongod.exe を使用できます。
>"C:Program FilesMongoDBbinmongod.exe" --dbpath d:tutorialmongodbdata
Linux へのインストール
macOS のダウンロードと同様に、MongoDB for Linux のバリアントも、アーカイブされたバイナリの束の形式で入手できます。 MongoDB をインストールするプロセスは非常に似ています。
- バイナリを目的の場所に移動します
- フォルダー内のターミナルを開きます
- 目的の DB の場所を指定して以下のコマンドを実行します。
$ ./mongod --dbpath /path-to-desired-directory/
最初のコレクションの作成
MongoDB はデータを JSON ドキュメントの形式で保存します。このようなドキュメントのグループは、MongoDB では集合的にコレクションとして知られています。したがって、コレクションはリレーショナル データベースのテーブルに似ており、ドキュメントはレコードに似ています。
ドキュメントを保存するには、まずコレクションを作成する必要があります。 NoSQL データベースの興味深い点は、SQL データベースとは異なり、列名やデータ型を指定する必要がないことです。
コレクションを作成するための最初のステップは、データベースを作成することです。データベースを作成し、コマンド ラインを使用して接続するには、MongoDB インストールのホーム ディレクトリから以下のコマンドを実行します。
$ ./bin/mongo tutorial
このコマンドは、データベース接続の開始とチュートリアル データベースへの接続を同時に行うために使用されます。コマンドラインが MongoDB データベースに接続したことを示す多数の行がログに表示されます。
同じことについてよりよく理解できるように、サンプルのコマンド ライン イメージを以下に示します。
- コレクションを作成するには、以下のコマンドを実行します。
$ > db.createCollection('firstCollection');
これが空のコレクションの作成方法です。次のステップでは、MongoDB コマンド ラインを使用してデータを挿入し、レコードに対して何らかの処理を実行します。
ドキュメントをコレクションに挿入する
上で説明したように、ほぼすべての JSON をすべての MongoDB コレクションに挿入できます。
最初の JSON ドキュメントを上で作成した firstCollection コレクションに挿入することから始めましょう。
> db.firstCollection.insertOne({name:'Abhishek',skill:'MongoDB'});
上記のコマンドは、単一の JSON ドキュメントを firstCollection に挿入します。以下に示すコマンドを使用して同じことを確認できます。
> db.firstCollection.find();
上記のコマンドは、
find()
関数のバリエーションに応じて複数の用途があります。上記のコマンドのように引数が指定されていない場合、コレクションから利用可能なすべてのドキュメントがフェッチされます。
もう 1 つのレコードを挿入して、同じことを試すこともできます。これを実行すると、上記のコマンドの出力は以下のようになります。
> db.firstCollection.find();
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }
ご覧のとおり、利用可能なレコードが 2 つ表示されています。
find()
関数を使用すると、特定のパラメータに基づいてドキュメントをフィルタリングすることが簡単にできます。 name 属性を使用してドキュメントをフィルタリングしましょう。
フィルター処理は単純で、以下のコマンドで理解できます。
db.firstCollection.find({name:'Abhishek'});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
フィルターは、JSON 内の複数の属性とともに使用することもできます。クエリには任意の数のパラメータを追加できますが、このアプローチの制限は、属性の正確な値のみと一致することです。
正規表現を使用したレコードのフィルタリング
MySQL の ような 句に相当する MongoDB を実行するために、MongoDB は 正規表現を使用します。 正規表現は、一致するパターンを形成する一連の文字です。正規表現リテラルは、 JavaScript で使用されるもの と似ています。
現在のコレクションでは、スキル属性のパターンに一致するデータのフェッチを試みます。以下のコマンドは、MongoDB スキルを持つ人のリストを取得します。したがって、両方のレコードに文字列 MongoDB が含まれるため、2 つのレコードがフェッチされます。
> db.firstCollection.find({skill:/.*MongoDB.*/});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }
> db.firstCollection.find({skill:/.*Java.*/});
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }
上記のコードは、2 つの異なる文字列の結果を正規表現形式で表示します。最初のクエリは、skill 属性にキーワード MongoDB が含まれるドキュメントのリストを取得し、もう 1 つのクエリは Java のみのスキルを持つユーザーを取得します。
条件に基づくクエリの次の課題は、OR または AND 条件を使用してクエリを実行することです。
MongoDB の複雑なクエリ
上記のコマンドから明らかなように、MongoDB の where 句は JSON に対して機能します。条件を組み合わせるプロセスも JSON 自体に依存します。 MongoDB には、関連するクエリ操作を実行するための $or、$and、$not などの演算子が用意されています。
name 属性に Abhishek が含まれるドキュメント、またはスキルに Java が含まれるドキュメントのリストを取得してみます。
> db.firstCollection.find({$or: [{name:'Abhishek'},{skill:/.*Java.*/}]});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "", "skill" : "Java,MongoDB,NodeJS" }
見てわかるように、両方のレコードが取得されます。 name 属性を として使用して、変更を確認してみてください。 3 つのスキルと という名前を持つドキュメントのみが表示されます。
同様に、上に示したように条件の JSON 配列で
$and
演算子を使用することができます。
次の演算子のセットでは、以下のコマンドを使用して、もう 1 つのコレクションを作成し、それにいくつかのレコードを追加する必要があります。
> db.createCollection('studentmarks');
{ "ok" : 1 }
> db.studentmarks.insertMany([{name:'A',marks:20},{name:'B',marks:25},{name:'C',marks:22},{name:'D',marks:30}]);
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5b06e7b5c29a7184535e783c"),
ObjectId("5b06e7b5c29a7184535e783d"),
ObjectId("5b06e7b5c29a7184535e783e"),
ObjectId("5b06e7b5c29a7184535e783f")
]
}
次に使用する演算子のセットは、クエリ内の比較演算子です。 「以下」 、「 以上」 、 「等しくない」 などの条件を使用して値を比較するには、渡す値に関連する演算子を使用します。
22 点を超える学生のリストを取得する例を以下に示します。
db.studentmarks.find({marks:{$gt:22}});
{ "_id" : ObjectId("5b06e7b5c29a7184535e783d"), "name" : "B", "marks" : 25 }
{ "_id" : ObjectId("5b06e7b5c29a7184535e783f"), "name" : "D", "marks" : 30 }
ここでの
$gt
は、基準
よりも大きいことを
示します。したがって、マークが 22 を超える文書が表示されます。同様に、使用できる演算子は他にもあります。それらは以下にリストされています。
| オペレーター | 使用 | 例 |
|---|---|---|
| $eq | 値が等しいかどうかを確認する | {マーク:{$eq:20}} |
| $lt | 値が以下かどうかを確認します | {マーク: {$lt:20}} |
| $gte | 値が以上であるかどうかを確認します | {マーク:{$gte:22}} |
| $lte | 値が以下であるかどうかを確認します | {マーク:{$lte:22}} |
| $ne | 値が次と等しくないことを確認する | {マーク:{$ne:22}} |
| $in | 値が配列のいずれかの値と等しいかどうかを確認します | {マーク:{$in:[20,22]}} |
| $9 | 値が配列のどの値とも等しくないことを確認します | {マーク:{$nin:[22,25]}} |
ここでさらに MongoDB コマンドを調べてください。
MongoDB の GUI
上記の説明では、コマンド ラインを使用して MongoDB でクエリを実行しました。
複雑なクエリや大量のデータの場合、コマンド ラインの使用は困難になる可能性があります。データの表示とクエリの実行を簡単にするために、MongoDB には MongoDB Compass と呼ばれる優れた GUI ツールが提供されています。
MongoDB コンパスは、 MongoDB ダウンロード サイト から簡単にダウンロードできます。 MongoDB Compass をダウンロードしてインストールしたら、アプリケーションを起動すると、以下のような画面が表示されます。
MongoDB サーバーが稼働していることを考慮して、デフォルトの詳細で「接続」をクリックします。ログインすると、使用可能なデータベースのリストが表示されます。
チュートリアル データベースをクリックして、チュートリアル データベース内のコレクションのリストを確認します。以下に示すように、チュートリアル データベースで利用可能なコレクションのリストが表示されます。
コレクションをクリックすると、JSON を使用してレコードをフィルタリングするために必要なコントロールを備えたドキュメントのリストが表示されます。また、ドキュメントを都合に応じて JSON 形式または表形式で表示する機能も備えています。
GUI を使用すると、ドキュメントの追加も簡単になります。以下に示す画面で [ドキュメントの挿入] ボタンをクリックするだけです。小さなダイアログが開き、自動生成されたドキュメント ID を使用してドキュメントの詳細を尋ねます。
GUI は、MongoDB コマンドライン インターフェイスを使用して実行するのが難しい可能性のある多くの操作を簡素化します。
他にも NoSQL クライアントを探索できます。
結論
さまざまな例で NoSQL の本質を捉え、インストールやドキュメントが一般的なリレーショナル データベース レコードとどのように異なるかを理解しました。 MongoDB をゼロから学ぶ オンライン コースも参照してください。
あなたが開発者であれば、 これ に興味があるかもしれません。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





