[A-00218] MongoDB事始め(Java)

javaでmongodbを使う方法を記載しておく。

基本的にDockerで動かしますので下記のコマンドを実行してmongodbサーバーを起動します。

#!/bin/bash

docker run -itd \
 -e MONGO_INITDB_ROOT_USERNAME=root \
 -e MONGO_INITDB_ROOT_PASSWORD=pass \
 -e MONGO_INITDB_DATABASE=documents \
 -p 27017:27017 \
 --name mongo \
 mongo

上記のshellを実行して下記のコマンドでコンテナ内に入ります。

docker exec -it mongo bash

Dockerコンテナ内部でmongoshを実行してmongodbに接続します。

mongosh -u root -p pass

上記でログインしたら[test]というdbに接続します。下記のコマンドを実行して適当なデータを作成する。

test> db.users.insert({username:"tanaka"})
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
  acknowledged: true,
  insertedIds: { '0': ObjectId('670165903c24baa23c964033') }
}
test> db.users.insert({username:"sasaki"})
{
  acknowledged: true,
  insertedIds: { '0': ObjectId('670165a63c24baa23c964034') }
}

findで追加したデータを確認します。

test> db.users.find()
[
  { _id: ObjectId('670165903c24baa23c964033'), username: 'tanaka' },
  { _id: ObjectId('670165a63c24baa23c964034'), username: 'sasaki' }
]

上記でmongodb側の準備ができたのでjavaで接続してみます。

mavenに下記のdependencyを追加します。driverです。

		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongodb-driver-sync</artifactId>
			<version>5.2.0</version>
		</dependency>

javaのプログラムは下記です。

package com.example.common;

import static java.util.Collections.singletonList;

import org.bson.Document;

import com.mongodb.Block;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.connection.ClusterSettings;

public class MongoConnection {
    public static void main(String[] args) throws Exception {
        MongoCredential credential = MongoCredential.createCredential("root", "admin", "pass".toCharArray());
        Block<ClusterSettings.Builder> localhost = builder -> builder.hosts(singletonList(new ServerAddress("localhost", 27017)));
        MongoClientSettings settings = MongoClientSettings.builder()
        .applyToClusterSettings(localhost)
        .credential(credential)
        .build();

        try( MongoClient client = MongoClients.create(settings)) {
        MongoCollection<Document> col = client.getDatabase("test").getCollection("users");
        System.out.println(col.countDocuments());
        FindIterable<Document> iterable = col.find();
        iterable.forEach((doc) -> System.out.println(doc));
        }
    }
}

上記を実行すると下記のような結果になります。

2
Document{{_id=670165903c24baa23c964033, username=tanaka}}
Document{{_id=670165a63c24baa23c964034, username=sasaki}}

以上で基本的な動作確認ができました。

・データをインサートする

mongodbにデータを登録します。

package com.example.common;

import static java.util.Collections.singletonList;

import org.bson.Document;

import com.mongodb.Block;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.connection.ClusterSettings;

public class MongoInsert {

    public static void main(String[] args) throws Exception {
                MongoCredential credential = MongoCredential.createCredential("root", "admin", "pass".toCharArray());
        Block<ClusterSettings.Builder> localhost = builder -> builder.hosts(singletonList(new ServerAddress("localhost", 27017)));
        MongoClientSettings settings = MongoClientSettings.builder()
        .applyToClusterSettings(localhost)
        .credential(credential)
        .build();

        try( MongoClient client = MongoClients.create(settings)) {
        MongoCollection<Document> col = client.getDatabase("test").getCollection("users");

        Document user = new Document();
        user.append("username", "suzuki");
        col.insertOne(user);
        }
    }
}
test> db.users.find()
[
  { _id: ObjectId('670165903c24baa23c964033'), username: 'tanaka' },
  { _id: ObjectId('670165a63c24baa23c964034'), username: 'sasaki' },
  { _id: ObjectId('67016d293789ec43f3b2cd45'), username: 'suzuki' }
]

プログラム実行後にfindで確認すると3レコードになっていたので正常に動作しました。

・複数レコードのインサート

複数レコードをインサートする場合は下記になります。

package com.example.common;

import java.util.ArrayList;
import static java.util.Collections.singletonList;
import java.util.List;

import org.bson.Document;

import com.mongodb.Block;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.connection.ClusterSettings;

public class MongoInsertMany {
    public static void main(String[] args) throws Exception {
                MongoCredential credential = MongoCredential.createCredential("root", "admin", "pass".toCharArray());
        Block<ClusterSettings.Builder> localhost = builder -> builder.hosts(singletonList(new ServerAddress("localhost", 27017)));
        MongoClientSettings settings = MongoClientSettings.builder()
        .applyToClusterSettings(localhost)
        .credential(credential)
        .build();

        try( MongoClient client = MongoClients.create(settings)) {
        MongoCollection<Document> col = client.getDatabase("test").getCollection("users");

        List<Document> userList = new ArrayList<>();
        Document user1 = new Document();
        user1.append("username", "hashimoto");
        Document user2 = new Document();
        user2.append("username", "hayashi");

        userList.add(user1);
        userList.add(user2);

        col.insertMany(userList);
        }
    }
}

実行後、レコードは下記になります。

test> db.users.find()
[
  { _id: ObjectId('670165903c24baa23c964033'), username: 'tanaka' },
  { _id: ObjectId('670165a63c24baa23c964034'), username: 'sasaki' },
  { _id: ObjectId('67016d293789ec43f3b2cd45'), username: 'suzuki' },
  { _id: ObjectId('67016f689f56e83bb63ba243'), username: 'hashimoto' },
  { _id: ObjectId('67016f689f56e83bb63ba244'), username: 'hayashi' }
]

複数レコード増えているので正常に動いたようです。

・Appendix

参考文献はこちら

https://zenn.dev/hashito/articles/f036b50c3c33d1

https://qiita.com/chenglin/items/3c4cea19c24ac6993434

https://www.mongodb.com/ja-jp/docs/drivers/go/current/fundamentals/auth

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*