1。概要
この記事では、非常に人気のあるNoSQLオープンソースデータベースであるMongoDBをスタンドアロンのJavaクライアントと統合する方法について説明します。
MongoDBはC++で記述されており、map-reduce、自動シャーディング、レプリケーション、高可用性など、非常に多くの確かな機能を備えています。
2。 MongoDB
MongoDB自体に関するいくつかの重要なポイントから始めましょう:
- さまざまな構造を持つことができるJSONのようなドキュメントにデータを保存します
- 動的スキーマを使用します。つまり、事前に定義しなくてもレコードを作成できます
- レコードの構造は、新しいフィールドを追加するか、既存のフィールドを削除するだけで変更できます
上記のデータモデルにより、階層関係を表現したり、配列やその他のより複雑な構造を簡単に格納したりすることができます。
3。用語
リレーショナルデータベース構造と比較できれば、MongoDBの概念を理解しやすくなります。
Mongoと従来のMySQLシステムの類似点を見てみましょう:
- 表 MySQLではコレクションになります モンゴで
- 行 ドキュメントになります
- 列 フィールドになります
- 参加 リンクとして定義されます および埋め込み ドキュメント
これはもちろん、MongoDBのコア概念を調べるための単純な方法ですが、それでも便利です。
それでは、この強力なデータベースを理解するために、実装について詳しく見ていきましょう。
4。 Mavenの依存関係
まず、MongoDBのJavaドライバーの依存関係を定義する必要があります。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
ライブラリの新しいバージョンがリリースされているかどうかを確認するには、ここでリリースを追跡します。
5。 MongoDBの使用
それでは、Javaを使用したMongoクエリの実装を始めましょう。最初に最適な基本的なCRUD操作について説明します。
5.1。 MongoClientと接続する
まず、MongoDBサーバーに接続しましょう。バージョン>=2.10.0では、 MongoClientを使用します :
MongoClient mongoClient = new MongoClient("localhost", 27017);
また、古いバージョンの場合は Mongoを使用してください クラス:
Mongo mongo = new Mongo("localhost", 27017);
5.2。データベースへの接続
それでは、データベースに接続しましょう。作成する必要がないことに注意してください。 Mongoは、データベースが存在しないことを確認すると、データベースを作成します。
DB database = mongoClient.getDB("myMongoDb");
場合によっては、デフォルトで、MongoDBは認証済みモードで実行されます。その場合、データベースへの接続中に認証する必要があります。
以下に示すようにそれを行うことができます:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3。既存のデータベースを表示する
既存のすべてのデータベースを表示してみましょう。コマンドラインを使用する場合、データベースを表示する構文はMySQLに似ています:
show databases;
Javaでは、以下のスニペットを使用してデータベースを表示します:
mongoClient.getDatabaseNames().forEach(System.out::println);
出力は次のようになります:
local 0.000GB
myMongoDb 0.000GB
上記、ローカル はデフォルトのMongoデータベースです。
5.4。 コレクションを作成する
コレクションを作成することから始めましょう (MongoDBに相当するテーブル)データベース用。データベースに接続したら、コレクションを作成できます。 として:
database.createCollection("customers", null);
それでは、現在のデータベースの既存のコレクションをすべて表示しましょう。
database.getCollectionNames().forEach(System.out::println);
出力は次のようになります:
customers
5.5。 保存–挿入
保存 操作には保存または更新のセマンティクスがあります: idの場合 が存在する場合、更新を実行します 、そうでない場合–挿入を実行します 。
保存するとき 新規顧客:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
エンティティはデータベースに挿入されます:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
次に、同じ操作を見ていきます–保存 – update セマンティクス。
5.6。 保存–更新
保存を見てみましょう 更新 セマンティクス、既存の顧客を操作する:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
さて、保存すると 既存のお客様–更新します:
BasicDBObject query = new BasicDBObject();
query.put("name", "Shubham");
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "John");
BasicDBObject updateObject = new BasicDBObject();
updateObject.put("$set", newDocument);
collection.update(query, updateObject);
データベースは次のようになります:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
ご覧のとおり、この特定の例では、保存 updateのセマンティクスを使用します 、指定された _idのオブジェクトを使用するため 。
5.7。 ドキュメントを読む コレクションから
ドキュメントを検索してみましょう コレクション クエリを実行する:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
ドキュメントのみが表示されます 今ではコレクションにあります :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8。 削除 ドキュメント
最後のCRUD操作である削除に進みましょう:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
上記のコマンドを実行すると、唯一のドキュメント コレクションから削除されます 。