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

Ответы

Ответ 1

DBCollection.insert принимает параметр типа DBObject, List<DBObject> или массив DBObject для вставки нескольких документов одновременно. Вы передаете строковый массив.

Вы должны вручную заполнить документы (DBObject s), вставить их в List<DBObject> или массив DBObject и в конечном итоге 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"} ]);

Ответ 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);

Ответ 3

Начиная с версии драйвера 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();

Ответ 4

Создание документов

Существуют две основные команды для создания документов в MongoDB:

  • insertOne()
  • insertMany()

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

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

Чтобы вставить несколько документов, мы можем использовать insertMany() -, который принимает в качестве параметра массив документов. При выполнении он возвращает несколько id для каждого документа в массиве. Чтобы удалить коллекцию, используйте команду 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}
);

Ответ 5

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