web-dev-qa-db-ja.com

Javaを介してMongoDBに複数のドキュメントを一度に挿入する方法

私はアプリケーションで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を使用して複数のドキュメントを一度に挿入できるようにする方法を教えてください。

32
user663724

DBCollection.insertは、複数のドキュメントを一度に挿入するために、DBObjectList<DBObject>型のパラメーター、またはDBObjectsの配列を受け入れます。文字列配列を渡します。

ドキュメント(DBObjects)を手動で作成し、List<DBObject>またはDBObjectsの配列に挿入し、最終的に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"} ]);
40
c.P.u1

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);
20
Vins

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();
17
Scott

ドキュメントを作成する

MongoDBでドキュメントを作成するための2つの主要なコマンドがあります。

  • insertOne()
  • insertMany()

Updateコマンドなど、他の方法もあります。これらの操作をアップサートと呼びます。アップサートは、ドキュメントの識別に使用されるselectorに一致するドキュメントがない場合に発生します。

MongoDBは独自にIDを挿入しますが、insert...()関数で__id_パラメーターを指定することにより、カスタムIDを手動で挿入することもできます。

複数のドキュメントを挿入するには、insertMany()を使用できます。これは、ドキュメントの配列をパラメーターとして受け取ります。実行されると、配列内の各ドキュメントに対して複数のidsを返します。コレクションを削除するには、drop()コマンドを使用します。時々、一括挿入を行うとき-重複する値を挿入する場合があります。具体的には、重複した__id_ sを挿入しようとすると、_duplicate key error_が取得されます。

 
 db.startup.insertMany(
 
 {_id: "id1"、name: "Uber"}、
 {_id: " id2 "、name:" Airbnb "}、
 {_id:" id1 "、name:" Uber "}、
 
); 

MongoDB duplicate key error

MongoDBは、エラーが発生した場合、それを抑制するために操作の挿入を停止します-_ordered:false_パラメーターを指定できます。例:

 
 db.startup.insertMany(
 
 {_ id: "id1"、name: "Uber"}、
 {_ id: " id2 "、name:" Airbnb "}、
 {_ id:" id1 "、name:" Airbnb "}、
、
 {ordered:false} 
); 
3
student

クエリがソース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);
}   
2
Hemang Rami