34

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

4

5 に答える 5

21

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.0を使用している場合は、次を使用できます

MongoDatabase database = mongoClient.getDatabase("yourDB");
            MongoCollection<Document> collection = database.getCollection("yourCollection");
            collection.insertMany(yourDocumentList);
于 2015-05-05T17:19:32.833 に答える
17

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();
于 2014-05-29T20:56:48.360 に答える
3

ドキュメントの作成

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

  • insertOne()
  • insertMany()

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

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

複数のドキュメントを挿入するinsertMany()には、ドキュメントの配列をパラメーターとして使用します。id実行すると、配列内のドキュメントごとに複数の が返されます。コレクションを削除するには、drop()コマンドを使用します。場合によっては、一括挿入を行うときに、重複する値を挿入することがあります。具体的には、重複した を挿入しようとすると_id、次のようになりますduplicate key error

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

MongoDB 重複キー エラー

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

db.startup.insertMany(
[
{_id:"id1", name:"Uber"},
{_id:"id2", name:"Airbnb"},
{_id:"id1", name:"Airbnb"},
]、
{注文済み: false}
);
于 2016-08-29T18:50:34.420 に答える
2

クエリが任意のソース EG から引退する MongoDB のような挿入レコード形式。

 {
    "_id" : 1,
    "name" : a
}
{
    "_id" : 2,
    "name" : b,
} 

それはmongodb 3.0です

FindIterable<Document> resulutlist = collection.find(query);            
List docList = new ArrayList();
for (Document document : resulutlist) {
    docList.add(document);
}

if(!docList.isEmpty()){
    collectionCube.insertMany(docList);
}   
于 2015-05-13T07:54:15.343 に答える