私はアプリケーションでMongoDBを使用しており、MongoDBコレクション内に複数のドキュメントを挿入する必要がありました。私が使用しているバージョンは1.6です
私はここで例をみました
http://docs.mongodb.org/manual/core/create/
の中に
複数ドキュメントの一括挿入セクション
著者がこれを行うために配列を渡したところ。
私が同じことを試みたが、なぜそれが許可されないのか、そして一度に複数のドキュメントを挿入する方法を教えてください??
package com;
import Java.util.Date;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
public class App {
public static void main(String[] args) {
try {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("at");
DBCollection collection = db.getCollection("people");
/*
* BasicDBObject document = new BasicDBObject();
* document.put("name", "mkyong"); document.put("age", 30);
* document.put("createdDate", new Date()); table.insert(document);
*/
String[] myStringArray = new String[] { "a", "b", "c" };
collection.insert(myStringArray); // Compilation error at this line saying that "The method insert(DBObject...) in the type DBCollection is not applicable for the arguments (String[])"
} catch (Exception e) {
e.printStackTrace();
}
}
}
Javaを使用して複数のドキュメントを一度に挿入できるようにする方法を教えてください。
DBCollection.insert
は、複数のドキュメントを一度に挿入するために、DBObject
、List<DBObject>
型のパラメーター、またはDBObject
sの配列を受け入れます。文字列配列を渡します。
ドキュメント(DBObject
s)を手動で作成し、List<DBObject>
またはDBObject
sの配列に挿入し、最終的にinsert
に挿入する必要があります。
DBObject document1 = new BasicDBObject();
document1.put("name", "Kiran");
document1.put("age", 20);
DBObject document2 = new BasicDBObject();
document2.put("name", "John");
List<DBObject> documents = new ArrayList<>();
documents.add(document1);
documents.add(document2);
collection.insert(documents);
上記のスニペットは、MongoDBシェルで発行するコマンドと本質的に同じです。
db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);
3.0より前では、Javaで以下のコードを使用できます
DB db = mongoClient.getDB("yourDB");
DBCollection coll = db.getCollection("yourCollection");
BulkWriteOperation builder = coll.initializeUnorderedBulkOperation();
for(DBObject doc :yourList)
{
builder.insert(doc);
}
BulkWriteResult result = builder.execute();
return result.isAcknowledged();
mongodbバージョン3.を使用している場合、使用できます
MongoDatabase database = mongoClient.getDatabase("yourDB");
MongoCollection<Document> collection = database.getCollection("yourCollection");
collection.insertMany(yourDocumentList);
MongoDB 2.6および2.12バージョンのドライバーでは、 一括挿入操作 も実行できます。 Javaを使用できます BulkWriteOperation 。これの使用例は次のようになります。
DBCollection coll = db.getCollection("user");
BulkWriteOperation bulk = coll.initializeUnorderedBulkOperation();
bulk.find(new BasicDBObject("z", 1)).upsert().update(new BasicDBObject("$inc", new BasicDBObject("y", -1)));
bulk.find(new BasicDBObject("z", 1)).upsert().update(new BasicDBObject("$inc", new BasicDBObject("y", -1)));
bulk.execute();
MongoDBでドキュメントを作成するための2つの主要なコマンドがあります。
insertOne()
insertMany()
Update
コマンドなど、他の方法もあります。これらの操作をアップサートと呼びます。アップサートは、ドキュメントの識別に使用されるselectorに一致するドキュメントがない場合に発生します。
MongoDBは独自にIDを挿入しますが、insert...()
関数で__id
_パラメーターを指定することにより、カスタムIDを手動で挿入することもできます。
複数のドキュメントを挿入するには、insertMany()
を使用できます。これは、ドキュメントの配列をパラメーターとして受け取ります。実行されると、配列内の各ドキュメントに対して複数のid
sを返します。コレクションを削除するには、drop()
コマンドを使用します。時々、一括挿入を行うとき-重複する値を挿入する場合があります。具体的には、重複した__id
_ sを挿入しようとすると、_duplicate key error
_が取得されます。
db.startup.insertMany( {_id: "id1"、name: "Uber"}、 {_id: " id2 "、name:" Airbnb "}、 {_id:" id1 "、name:" Uber "}、 );
MongoDBは、エラーが発生した場合、それを抑制するために操作の挿入を停止します-_ordered:false
_パラメーターを指定できます。例:
db.startup.insertMany( {_ id: "id1"、name: "Uber"}、 {_ id: " id2 "、name:" Airbnb "}、 {_ id:" id1 "、name:" Airbnb "}、 、 {ordered:false} );
クエリがソースEGから廃止されるMongoDBのような挿入レコード形式。
{
"_id" : 1,
"name" : a
}
{
"_id" : 2,
"name" : b,
}
mongodb 3.
FindIterable<Document> resulutlist = collection.find(query);
List docList = new ArrayList();
for (Document document : resulutlist) {
docList.add(document);
}
if(!docList.isEmpty()){
collectionCube.insertMany(docList);
}