JavaによるMongoDBのガイド

Javaを使用したMongoDBのガイド

 

1. 概要

この記事では、非常に人気のあるNoSQLオープンソースデータベースであるMongoDBをスタンドアロンのJavaクライアントと統合する方法について説明します。

MongoDBはCで書かれており、map-reduce、auto-sharding、レプリケーション、高可用性など、多数の堅実な機能を備えています。

2. MongoDB

まず、MongoDB自体に関するいくつかの重要なポイントから始めましょう。

  • さまざまな構造を持つことができるJSONのようなドキュメントにデータを格納します

  • 動的スキーマを使用します。つまり、何も事前定義せずにレコードを作成できます。

  • レコードの構造は、新しいフィールドを追加するか、既存のフィールドを削除するだけで変更できます。

上記のデータモデルにより、階層関係を表現したり、配列やその他のより複雑な構造を簡単に保存したりすることができます。

3. 用語集

MongoDBの概念を理解するには、それらをリレーショナルデータベース構造と比較することができます。

Mongoと従来のMySQLシステムの類似点を見てみましょう。

  • MySQLのTableは、MongoではCollectionになります

  • RowDocumentになります

  • ColumnFieldになります

  • Joinsは、linkingおよびembeddedドキュメントとして定義されます

これはもちろんMongoDBのコアコンセプトを見るための単純な方法ですが、それでも便利です。

それでは、この強力なデータベースを理解するために、実装について詳しく見ていきましょう。

4. Mavenの依存関係

MongoDBのJavaドライバーの依存関係を定義することから始める必要があります。


    org.mongodb
    mongo-java-driver
    3.4.1

ライブラリの新しいバージョンがリリースされているかどうかを確認するには–track the releases here

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

上記では、localがデフォルトのMongoデータベースです。

5.4. Collectionを作成します

データベースのCollection(MongoDBに相当するテーブル)を作成することから始めましょう。 データベースに接続したら、次のようにCollectionを作成できます。

database.createCollection("customers", null);

それでは、現在のデータベースの既存のコレクションをすべて表示しましょう。

database.getCollectionNames().forEach(System.out::println);

出力は次のようになります。

customers

5.5. 保存–挿入

save操作には、保存または更新のセマンティクスがあります。idが存在する場合は、updateを実行し、存在しない場合は、insertを実行します。

新規顧客をsaveすると:

DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "example");
collection.insert(document);

エンティティはデータベースに挿入されます:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

次に、同じ操作–save –とupdateセマンティクスを見ていきます。

5.6. 保存–更新

次に、既存の顧客を操作するupdateセマンティクスを持つsaveを見てみましょう。

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

ここで、既存の顧客をsaveすると、更新します。

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" : "example"
}

ご覧のとおり、この特定の例では、_idでオブジェクトを使用しているため、saveupdateのセマンティクスを使用しています。

5.7. CollectionからDocumentを読み取ります

クエリを実行して、Collection内のDocumentを検索してみましょう。

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

Collectionに現在あるDocumentのみが表示されます。

[
    {
      "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
      "name" : "John",
      "company" : "example"
    }
]

5.8. Delete Document

最後のCRUD操作である削除に進みましょう。

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");

collection.remove(searchQuery);

上記のコマンドを実行すると、DocumentのみがCollectionから削除されます。

6. 結論

この記事は、JavaからMongoDBを使用するための簡単な紹介です。

これらすべての例とコードスニペットの実装はover on GitHubにあります。これはMavenベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。