Как вставить несколько документов одновременно в MongoDB через Java

Я использую 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 .

5 ответов


DBCollection.insert принимает параметр типа DBObject, List<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"} ]);

до 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);

начиная с версии 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 есть две основные команды для создания документов:

  • insertOne()
  • insertMany()

есть и другие способы, такие как Update команды. Мы называем эти операции, операции upsert. Upserts происходит, когда нет документов, которые соответствуют селектор используются для идентификации документов.

хотя MongoDB вставляет ID самостоятельно, мы можем вручную вставить пользовательские идентификаторы также, указав на insert...() функции.

для вставки нескольких документов мы можем использовать insertMany() - который принимает массив документов в качестве параметра. При выполнении он возвращает multiple idS для каждого документа в массиве. Чтобы удалить коллекцию, используйте . Иногда при выполнении массовых вставок-мы можем вставлять повторяющиеся значения. В частности, если мы попытаемся вставить повторяющуюся _ids, мы получим duplicate key error:


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

MongoDB duplicate key error

MongoDB перестает вставлять операцию, если она обнаруживает ошибку, чтобы подавить это-мы можем поставить


ваш формат записи вставки, как в 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);
}