如何通过Java在MongoDB中一次插入多个文档

2022-09-01 06:28:40

我正在我的应用程序中使用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一次插入多个文档。


答案 1

DBCollection.insert接受类型的参数,或用于一次插入多个文档的数组。您正在传入字符串数组。DBObjectList<DBObject>DBObject

您必须手动填充文档,将它们插入到一个或一个数组中,并最终将它们插入到一个数组中。DBObjectList<DBObject>DBObjectinsert

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 shell中发出的命令相同:

db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);

答案 2

在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);