私たちは今日、MongoDBの一括挿入を調査します。複数のドキュメントを一度に挿入するには、MongoDBではバルク挿入操作を使用します。ここでは、ドキュメントの配列がinsertメソッドにパラメータとして渡されます。
MongoDBのバルク挿入
MongoDBのバルク挿入は、デフォルトで順序付きの挿入を実行します。特定のポイントで挿入中にエラーが発生した場合、残りのドキュメントに対しては挿入が行われません。コマンドラインを使用してmongodbのバルク挿入を行う例を見てみましょう。
MongoDBに複数のドキュメントを挿入
> db.car.insert(
... [
... { _id:1,name:"Audi",color:"Red",cno:"H101",mfdcountry:"Germany",speed:75 },
... { _id:2,name:"Swift",color:"Black",cno:"H102",mfdcountry:"Italy",speed:60 },
... { _id:3,name:"Maruthi800",color:"Blue",cno:"H103",mfdcountry:"India",speed:70 },
... { _id:4,name:"Polo",color:"White",cno:"H104",mfdcountry:"Japan",speed:65 },
... { _id:5,name:"Volkswagen",color:"JetBlue",cno:"H105",mfdcountry:"Rome",speed:80 }
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 5,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
この操作では、5つのドキュメントが挿入されました。MongoDBは、クエリでユーザーによって指定されていない場合、自動的にidフィールドを作成します。”nInserted“列は、挿入されたドキュメントの数をユーザーに示しています。挿入されたドキュメントを表示するには、以下に示すクエリを実行します。
> db.car.find()
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
>
MongoDBの検索およびMongoDBの挿入操作について詳しくは、こちらを参照してください。挿入中、ユーザーがクエリですべてのフィールドを指定する必要はありません。フィールドが指定されていない場合の挿入動作を見てみましょう。
MongoDB Bulk Insert ドキュメントの一部のフィールドを指定
> db.car.insert(
... [
... { _id:6,name:"HondaCity",color:"Grey",cno:"H106",mfdcountry:"Sweden",speed:45 },
... {name:"Santro",color:"Pale Blue",cno:"H107",mfdcountry:"Denmark",speed:55 },
... { _id:8,name:"Zen",speed:54 }
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
この例では、2番目のドキュメントではユーザーがidフィールドを指定しておらず、3番目のドキュメントではクエリにid、name、speedフィールドのみが供給されています。クエリは、2番目と3番目のドキュメントに一部のフィールドが欠落していても成功裏に挿入されます。nInserted列によれば、3つのドキュメントが挿入されました。findメソッドを呼び出して挿入されたドキュメントを確認してください。
> db.car.find()
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
{ "_id" : 6, "name" : "HondaCity", "color" : "Grey", "cno" : "H106", "mfdcountry" : "Sweden", "speed" : 45 }
{ "_id" : ObjectId("54885b8e61307aec89441a0b"), "name" : "Santro", "color" : "Pale Blue", "cno" : "H107", "mfdcountry" : "Denmark", "speed" : 55 }
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
>
注意:idはMongoDBによって「Santro」の車用に自動的に生成されます。id 8の場合、nameとspeedフィールドのみが挿入されます。
順不同のドキュメントの挿入
順不同の挿入を実行する際、あるポイントでエラーが発生した場合、mongodbは残りのドキュメントを配列で挿入し続けます。例:
> db.car.insert(
... [
... { _id:9,name:"SwiftDezire",color:"Maroon",cno:"H108",mfdcountry:"New York",speed:40 },
... { name:"Punto",color:"Wine Red",cno:"H109",mfdcountry:"Paris",speed:45 },
... ],
... { ordered: false }
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
挿入クエリでordered falseが指定されており、これが順不同のコレクションであることを示しています。db.car.find()を実行してください。
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
{ "_id" : 6, "name" : "HondaCity", "color" : "Grey", "cno" : "H106", "mfdcountry" : "Sweden", "speed" : 45 }
{ "_id" : ObjectId("54746407d785e3a05a1808a6"), "name" : "Santro", "color" : "Pale Blue", "cno" : "H107", "mfdcountry" : "Denmark", "speed" : 55 }
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
{ "_id" : 9, "name" : "SwiftDezire", "color" : "Maroon", "cno" : "H108", "mfdcountry" : "New York", "speed" : 40 }
{ "_id" : ObjectId("5474642dd785e3a05a1808a7"), "name" : "Punto", "color" : "Wine Red", "cno" : "H109", "mfdcountry" : "Paris", "speed" : 45 }
ドキュメントが挿入され、順不同の挿入であることが分かります。挿入メソッドがエラーに遭遇すると、結果には失敗の原因を示す「WriteResult.writeErrors」フィールドが含まれます。
重複したID値の挿入
> db.car.insert({_id:6,name:"Innova"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: journaldev.car.$_id_ dup key: { : 6.0 }"
}
})
>
このエラーは、ID 6のドキュメントにすでにドキュメントが含まれているため、値6の重複キーのエラーがスローされていることを示しています。
MongoDB Bulk.insert()メソッド
このメソッドは、一括で挿入操作を実行します。バージョン2.6以降で導入されました。構文はBulk.insert(<document>)
です。 document: 挿入するドキュメントを指定します。今度は一括挿入の例を見てみましょう。
Bulk Unordered insert
> var carbulk = db.car.initializeUnorderedBulkOp();
> carbulk.insert({ name:"Ritz", color:"Grey",cno:"H109",mfdcountry:"Mexico",speed:62});
> carbulk.insert({ name:"Versa", color:"Magenta",cno:"H110",mfdcountry:"France",speed:68});
> carbulk.insert({ name:"Innova", color:"JetRed",cno:"H111",mfdcountry:"Dubai",speed:72});
> carbulk.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
carbulkという名前の無順序リストが作成され、挿入するフィールドと値が指定された挿入クエリがあります。最後の挿入ステートメントの後にexecute()メソッドを呼び出して、データが実際にデータベースに挿入されることを確認する必要があります。
MongoDBのバルク順序挿入
これは、無順序のバルク挿入に類似していますが、initializeOrderedBulkOp
呼び出しを使用します。
>var car1bulk = db.car.initializeOrderedBulkOp();
>car1bulk.insert({ name:"Ertiga", color:"Red",cno:"H112",mfdcountry:"America",speed:65});
>car1bulk.insert({ name:"Quanta", color:"Maroon",cno:"H113",mfdcountry:"Rome",speed:78});
>car1bulk.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
まず、carbulk1という名前の車のコレクションの順序付きリストを作成し、次にexecute()メソッドを呼び出してドキュメントを挿入します。
MongoDBのバルク挿入Javaプログラム
これまでにシェルコマンドを使用して見てきたさまざまなバルク操作のJavaプログラムを見てみましょう。以下は、MongoDB Javaドライバーバージョン2.xを使用したバルク挿入のJavaプログラムです。
package com.journaldev.mongodb;
import com.mongodb.BasicDBObject;
import com.mongodb.BulkWriteOperation;
import com.mongodb.BulkWriteResult;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
public class MongoDBBulkInsert {
//メソッドがすべてのドキュメントを挿入する
public static void insertmultipledocs() throws UnknownHostException{
//実行中であると仮定して新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
////ここにデータベースを使用してテストとして使用する
DB db=mongoClient.getDB("test");
////コレクションオブジェクトを取得し、ここではcarが使用されています。独自の使用
DBCollection coll = db.getCollection("car");
//新しいオブジェクトを作成する
DBObject d1 = new BasicDBObject();
//オブジェクトd1のデータ
d1.put("_id", 11);
d1.put("name","WagonR");
d1.put("color", "MetallicSilver");
d1.put("cno", "H141");
d1.put("mfdcountry","Australia");
d1.put("speed",66);
DBObject d2 = new BasicDBObject();
//オブジェクトd2のデータ
d2.put("_id", 12);
d2.put("name","Xylo");
d2.put("color", "JetBlue");
d2.put("cno", "H142");
d2.put("mfdcountry","Europe");
d2.put("speed",69);
DBObject d3 = new BasicDBObject();
//オブジェクトd3のデータ
d3.put("_id", 13);
d3.put("name","Alto800");
d3.put("color", "JetGrey");
d3.put("cno", "H143");
d3.put("mfdcountry","Austria");
d3.put("speed",74);
//新しいリストを作成する
List docs = new ArrayList<>();
//リストdocsにd1、d2、およびd3を追加する
docs.add(d1);
docs.add(d2);
docs.add(d3);
//リストdocsをコレクションに挿入する
coll.insert(docs);
//結果をカーソルに格納する
DBCursor carmuldocs = coll.find();
//カーソルの内容を表示する
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//いくつかのフィールドを持つドキュメントを挿入するメソッド
public static void insertsomefieldsformultipledocs() throws UnknownHostException{
//実行中であると仮定して新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
////ここにデータベースを使用してテストとして使用する
DB db=mongoClient.getDB("test");
////コレクションオブジェクトを取得し、ここではcarが使用されています。独自の使用
DBCollection coll = db.getCollection("car");
//オブジェクトd1を作成する
DBObject d1 = new BasicDBObject();
//名前、色、および速度のデータを挿入する
d1.put("name","Indica");
d1.put("color", "Silver");
d1.put("cno", "H154");
DBObject d2 = new BasicDBObject();
//id、名前、および速度のデータを挿入する
d2.put("_id", 43);
d2.put("name","Astar");
d2.put("speed",79);
List docs = new ArrayList<>();
docs.add(d1);
docs.add(d2);
coll.insert(docs);
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//重複したドキュメントをチェックするメソッド
public static void insertduplicatedocs() throws UnknownHostException{
//実行中であると仮定して新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
////ここにデータベースを使用してテストとして使用する
DB db=mongoClient.getDB("test");
////コレクションオブジェクトを取得し、ここではcarが使用されています。独自の使用
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
//id11の重複したデータを挿入する
d1.put("_id", 11);
d1.put("name","WagonR-Lxi");
coll.insert(d1);
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//無順リストを実行するメソッド
public static void insertbulkunordereddocs() throws UnknownHostException{
//実行中であると仮定して新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
////ここにデータベースを使用してテストとして使用する
DB db=mongoClient.getDB("test");
////コレクションオブジェクトを取得し、ここではcarが使用されています。独自の使用
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
d1.put("name","Suzuki S-4");
d1.put("color", "Yellow");
d1.put("cno", "H167");
d1.put("mfdcountry","Italy");
d1.put("speed",54);
DBObject d2 = new BasicDBObject();
d2.put("name","Santro-Xing");
d2.put("color", "Cyan");
d2.put("cno", "H164");
d2.put("mfdcountry","Holand");
d2.put("speed",76);
//無順バルクを初期化して作成する
BulkWriteOperation b1 = coll.initializeUnorderedBulkOperation();
//バルクb1にd1とd2を挿入する
b1.insert(d1);
b1.insert(d2);
//バルクを実行する
BulkWriteResult r1 = b1.execute();
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//順序付きリストのバルク挿入を実行するメソッド
public static void insertbulkordereddocs() throws UnknownHostException{
//実行中であると仮定して新しい接続を取得する
MongoClient mongoClient = new MongoClient("localhost");
////ここにデータベースを使用してテストとして使用する
DB db=mongoClient.getDB("test");
////コレクションオブジェクトを取得し、ここではcarが使用されています。独自の使用
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
d1.put("name","Palio");
d1.put("color", "Purple");
d1.put("cno", "H183");
d1.put("mfdcountry","Venice");
d1.put("speed",82);
DBObject d2 = new BasicDBObject();
d2.put("name","Micra");
d2.put("color", "Lime");
d2.put("cno", "H186");
d2.put("mfdcountry","Ethopia");
d2.put("speed",84);
//順序付きバルクを初期化して作成する
BulkWriteOperation b1 = coll.initializeOrderedBulkOperation();
b1.insert(d1);
b1.insert(d2);
//実行を呼び出す
BulkWriteResult r1 = b1.execute();
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
public static void main(String[] args) throws UnknownHostException{
//すべてのメソッドを呼び出して挿入操作を実行する
insertmultipledocs();
insertsomefieldsformultipledocs();
insertbulkunordereddocs();
insertbulkordereddocs();
insertduplicatedocs();
}
}
以下は、上記プログラムの出力です。
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
-----------------------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
-----------------------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d8"} , "name" : "Suzuki S-4" , "color" : "Yellow" , "cno" : "H167" , "mfdcountry" : "Italy" , "speed" : 54}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d9"} , "name" : "Santro-Xing" , "color" : "Cyan" , "cno" : "H164" , "mfdcountry" : "Holand" , "speed" : 76}
-----------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d8"} , "name" : "Suzuki S-4" , "color" : "Yellow" , "cno" : "H167" , "mfdcountry" : "Italy" , "speed" : 54}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d9"} , "name" : "Santro-Xing" , "color" : "Cyan" , "cno" : "H164" , "mfdcountry" : "Holand" , "speed" : 76}
{ "_id" : { "$oid" : "548860e803649b8efac5a1da"} , "name" : "Palio" , "color" : "Purple" , "cno" : "H183" , "mfdcountry" : "Venice" , "speed" : 82}
{ "_id" : { "$oid" : "548860e803649b8efac5a1db"} , "name" : "Micra" , "color" : "Lime" , "cno" : "H186" , "mfdcountry" : "Ethopia" , "speed" : 84}
Exception in thread "main" com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 , "err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.car.$_id_ dup key: { : 11 }" , "code" : 11000}
at com.mongodb.CommandResult.getWriteException(CommandResult.java:88)
at com.mongodb.CommandResult.getException(CommandResult.java:79)
at com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:314)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:189)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
at com.mongodb.DBCollection.insert(DBCollection.java:93)
at com.mongodb.DBCollection.insert(DBCollection.java:78)
at com.mongodb.DBCollection.insert(DBCollection.java:120)
at com.journaldev.mongodb.MongoDBBulkInsert.insertduplicatedocs(MongoDBBulkInsert.java:163)
at com.journaldev.mongodb.MongoDBBulkInsert.main(MongoDBBulkInsert.java:304)
もし、MongoDBのJavaドライバー3.xを使用している場合は、以下のプログラムを使用してください。
package com.journaldev.mongodb.main;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MongoDBBulkInsert {
public static void main(String[] args) throws UnknownHostException {
//すべてのメソッドを呼び出して挿入操作を実行します
insertmultipledocs();
insertsomefieldsformultipledocs();
insertduplicatedocs();
}
//すべてのドキュメントを挿入するメソッド
public static void insertmultipledocs() throws UnknownHostException {
//実行していると仮定して、DBへの新しい接続を取得します
MongoClient mongoClient = new MongoClient("localhost");
////ここにあなたのデータベースを使用します、テストをデータベースとして使用します
MongoDatabase db = mongoClient.getDatabase("test");
////コレクションオブジェクトを取得します、ここではcarを使用します、独自のものを使用してください
MongoCollection coll = db.getCollection("car");
//新しいオブジェクトを作成します
Document d1 = new Document();
//オブジェクトd1のデータ
d1.put("_id", 11);
d1.put("name", "WagonR");
d1.put("color", "MetallicSilver");
d1.put("cno", "H141");
d1.put("mfdcountry", "Australia");
d1.put("speed", 66);
Document d2 = new Document();
//オブジェクトd2のデータ
d2.put("_id", 12);
d2.put("name", "Xylo");
d2.put("color", "JetBlue");
d2.put("cno", "H142");
d2.put("mfdcountry", "Europe");
d2.put("speed", 69);
Document d3 = new Document();
//オブジェクトd3のデータ
d3.put("_id", 13);
d3.put("name", "Alto800");
d3.put("color", "JetGrey");
d3.put("cno", "H143");
d3.put("mfdcountry", "Austria");
d3.put("speed", 74);
//新しいリストを作成します
List docs = new ArrayList<>();
//d1、d2、およびd3をリストdocsに追加します
docs.add(d1);
docs.add(d2);
docs.add(d3);
//リストdocsをコレクションに挿入します
coll.insertMany(docs);
//結果をカーソルに保存します
FindIterable carmuldocs = coll.find();
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
//いくつかのフィールドを持つドキュメントを挿入するメソッド
public static void insertsomefieldsformultipledocs() throws UnknownHostException {
//実行していると仮定して、DBへの新しい接続を取得します
MongoClient mongoClient = new MongoClient("localhost");
////ここにあなたのデータベースを使用します、テストをデータベースとして使用します
MongoDatabase db = mongoClient.getDatabase("test");
////コレクションオブジェクトを取得します、ここではcarを使用します、独自のものを使用してください
MongoCollection coll = db.getCollection("car");
//オブジェクトd1を作成します
Document d1 = new Document();
//名前、色、およびスピードのデータを挿入します
d1.put("name", "Indica");
d1.put("color", "Silver");
d1.put("cno", "H154");
Document d2 = new Document();
//id、名前、およびスピードのデータを挿入します
d2.put("_id", 43);
d2.put("name", "Astar");
d2.put("speed", 79);
List docs = new ArrayList<>();
docs.add(d1);
docs.add(d2);
coll.insertMany(docs);
FindIterable carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
//重複するドキュメントをチェックするメソッド
public static void insertduplicatedocs() throws UnknownHostException {
//実行していると仮定して、DBへの新しい接続を取得します
MongoClient mongoClient = new MongoClient("localhost");
////ここにあなたのデータベースを使用します、テストをデータベースとして使用します
MongoDatabase db = mongoClient.getDatabase("test");
////コレクションオブジェクトを取得します、ここではcarを使用します、独自のものを使用してください
MongoCollection coll = db.getCollection("car");
Document d1 = new Document();
//id11の重複データを挿入します
d1.put("_id", 11);
d1.put("name", "WagonR-Lxi");
coll.insertOne(d1);
FindIterable carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
}
以下の画像は、上記のMongoDBバルク挿入Javaプログラムのサンプル実行を示しています。 これで、MongoシェルとJavaドライバを使用したMongoDBのバルク挿入に関する説明は終わりです。今後の投稿では、さらに多くのMongoDB操作を見ていきます。
Source:
https://www.digitalocean.com/community/tutorials/mongodb-bulk-insert-insertmany