はじめに
MongoDBは、NoSQLの世界ではドキュメント型の代表者であり、CRUDの実装は簡単です。
JAVAでCRUDのAPIを利用して簡単にまとめます。
ドライバライブラリ導入
// https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver
compileInclude group: 'org.mongodb', name: 'mongo-java-driver', version: '3.11.0'
Create
インサートイメージ
JAVAインサートサンプル
package mongodb;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class MongoDBTest {
	public static void main(String[] args) {
		// MongoDBクライントを生成する
		MongoClient client = MongoClients.create("mongodb://localhost:27017");
		// DBオブジェクトを取得する
		MongoDatabase db = client.getDatabase("mydb");
		// ユーザーコレクションを取得する
		MongoCollection<Document> users = db.getCollection("users");
		// ユーザーの属性をセット
		Document user = new Document();
		user.append("lastName", "tanaka");
		user.append("firstName", "ichiro");
		user.append("gender", "男性");
		// DBにインサート
		users.insertOne(user);
		// クライントを閉じる
		client.close();
	}
}
コレクションイメージ
複数インサート
List<Document> userList = new ArrayList<Document>();
		
Document user1 = new Document();
user1.append("lastName", "tanaka");
		
Document user2 = new Document();
user2.append("lastName", "yamada");
		
userList.add(user1);
userList.add(user2);
		
// リストをDBにインサート
users.insertMany(userList);
Read
検索イメージ
Find One
db.collection.find(filter).first()の感じで一件目を取得する。_idで検索したい場合はfirstメソッドが便利です。
package mongodb;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.types.ObjectId;
public class MongoDBTest {
	public static void main(String[] args) {
		// MongoDBクライントを生成する
		MongoClient client = MongoClients.create("mongodb://localhost:27017");
		// DBオブジェクトを取得する
		MongoDatabase db = client.getDatabase("mydb");
		// ユーザーコレクションを取得する
		MongoCollection<Document> users = db.getCollection("users");
		// _idで検索する
		Document user = users.find(Filters.eq("_id", new ObjectId("5d858b36c491de05900c4e32"))).first();
		if (user != null) {
			System.out.println("lastName:" + user.getString("lastName"));
		}
		// クライントを閉じる
		client.close();
	}
}
出力:
lastName:tanaka
Find List
findメソッドのパラメータに検索条件を渡すと絞り込むことは可能です。
Filtersクラスではいろんなメソッドを用意されています。


検索サンプル
// 姓で複数人を検索する
MongoCursor<Document> cursor = users.find(Filters.or(Filters.in("lastName", "tanaka", "yamada"))).cursor();
while (cursor.hasNext()) {
    Document user = (Document) cursor.next();
    // do something
}
// Cursorではなく、リストに変換しても便利です。
// List<Document> documents = users.find(Filters.or(Filters.in("lastName", "tanaka", "yamada"))).into(new ArrayList<Document>());
ソート、skip,limitなど
Document sort = new Document();
sort.append("updateDate", -1);
MongoCursor<Document> cursor = users.find(Filters.in("lastName", "tanaka", "yamada")).sort(sort).skip(20).limit(10).cursor();
Update
更新イメージ
Update One
updateOneメソッドで1件のデータを更新
package mongodb;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import java.util.Date;
import org.bson.Document;
import org.bson.types.ObjectId;
public class MongoDBTest {
	public static void main(String[] args) {
		// MongoDBクライントを生成する
		MongoClient client = MongoClients.create("mongodb://localhost:27017");
		// DBオブジェクトを取得する
		MongoDatabase db = client.getDatabase("mydb");
		// ユーザーコレクションを取得する
		MongoCollection<Document> users = db.getCollection("users");
		
		// 更新条件
		Document filter = new Document();
		filter.append("_id", new ObjectId("5d858b36c491de05900c4e32"));
		
		// 更新データ
		Document updateSet = new Document();
		updateSet.append("lastName", "鈴木");
		updateSet.append("updateDate", new Date());
		
		// updateオブジェクト
		Document update = new Document();
		update.append("$set", updateSet);
		
		// 更新
		users.updateOne(filter , update);
		
		// クライントを閉じる
		client.close();
	}
}
更新後のコレクションのデータ
Update Many
条件と一致するデータを更新したい場合はupdateManyメソッドを使います。

更新のマニュアル:https://docs.mongodb.com/manual/tutorial/update-documents/
Replace One
ドキュメントを一部データ更新ではなく、完全差し替えの場合は、replaceOneメソッドを使います。
// 更新条件
Document filter = new Document();
filter.append("_id", new ObjectId("5d858b36c491de05900c4e32"));
		
// 更新データ
Document update = new Document();
update.append("lastName", "鈴木");
update.append("updateDate", new Date());
		
// 差し替え
users.replaceOne(filter, update);
一点注意したいのは、DBで検索したドキュメントを差し替えデータとして処理すると、エラーになります。
悪い例:
// DBからデータ取得
Document user = users.find(Filters.eq("_id", new ObjectId("5d858b36c491de05900c4e32"))).first();
user.append("memo", "new user");
		
// 差し替え(違う_idなので、エラーになる。同じ_idなら問題ありません。)
users.replaceOne(Filters.eq("_id", new ObjectId("5d859c77b64c3286a4d29d90")), user);
違う_idの場合は、userの_idフィールドを削除すればエラー解消できます。
Versionデータが有る場合は、replaceOneメソッドを使ってよいかもしれません。
// DBからデータ取得
Document user = users.find(Filters.eq("_id", new ObjectId("5d858b36c491de05900c4e32"))).first();
user.append("memo", "new user");
user.remove("_id");
Delete
削除イメージ
deleteOne
users.deleteOne(Filters.eq("_id", new ObjectId("5d859c77b64c3286a4d29d90")));
deleteMany
users.deleteMany(Filters.eq("lastName", "鈴木"));
削除関連メソッド
マニュアル: https://docs.mongodb.com/manual/
CRUD(本文のイメージ): https://docs.mongodb.com/manual/crud/
以上








