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

41

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

您必须手动填充文档DBObject,将它们插入到一个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 shell 中发出的命令基本相同:

db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);
于 2013-08-08T14:24:32.250 回答
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 中创建文档有两个主要命令:

  • insertOne()
  • insertMany()

还有其他方法,例如Update命令。我们称这些操作为 upsert。当没有与用于识别文档的选择器匹配的文档时,就会发生 Upserts 。

虽然 MongoDB 自己插入 ID,但我们也可以通过在函数中指定_id参数来手动插入自定义 ID。insert...()

要插入多个文档,我们可以使用insertMany()- 它以文档数组作为参数。执行时,它为数组中的每个文档返回多个ids。要删除集合,请使用drop()命令。有时,在进行批量插入时 - 我们可能会插入重复值。具体来说,如果我们尝试插入重复_id的 s,我们将得到duplicate key error

db.startup.insertMany(
  [
  {_id:“id1”,名称:“优步”},
  {_id:"id2", name:"Airbnb"},
  {_id:“id1”,名称:“优步”},
  ]
  );

MongoDB重复键错误

如果遇到错误,MongoDB 会停止插入操作,以抑制这种情况——我们可以提供ordered:false参数。前任:

db.startup.insertMany(
[
{_id:“id1”,名称:“优步”},
{_id:"id2", name:"Airbnb"},
{_id:"id1", name:"Airbnb"},
],
{订购:假}
);
于 2016-08-29T18:50:34.420 回答
2

您的插入记录格式(如 MongoDB 中的查询从任何源 EG 中退出)。

 {
    "_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 回答