web-dev-qa-db-fra.com

Comment insérer plusieurs documents à la fois dans MongoDB via Java

J'utilise MongoDB dans mon application et je devais insérer plusieurs documents dans une collection MongoDB. La version que j'utilise est de 1.6

J'ai vu un exemple ici

http://docs.mongodb.org/manual/core/create/

dans le

Insertion en vrac de plusieurs documents Section

Où l'auteur passait un tableau pour ce faire.

Quand j'ai essayé la même chose, mais pourquoi cela ne le permet pas, et dites-moi comment puis-je insérer plusieurs documents à la fois ??

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();
        }

    }

}

Veuillez me faire savoir comment procéder pour que je puisse insérer plusieurs documents à la fois via Java.

32
user663724

DBCollection.insert accepte un paramètre de type DBObject, List<DBObject> ou un tableau de DBObjects pour insérer plusieurs documents à la fois. Vous passez dans un tableau de chaînes.

Vous devez remplir manuellement les documents (DBObjects), les insérer dans un List<DBObject> ou un tableau de DBObjects et éventuellement insert eux.

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

L'extrait ci-dessus est essentiellement le même que la commande que vous émettriez dans le shell MongoDB:

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

Avant 3.0, vous pouvez utiliser le code ci-dessous en 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();

Si vous utilisez mongodb version 3., vous pouvez utiliser

MongoDatabase database = mongoClient.getDatabase("yourDB");
            MongoCollection<Document> collection = database.getCollection("yourCollection");
            collection.insertMany(yourDocumentList);
20
Vins

À partir de la version MongoDB 2.6 et 2.12 du pilote, vous pouvez également effectuer une opération d'insertion en bloc . Dans Java vous pouvez utiliser BulkWriteOperation . Un exemple d'utilisation de ceci pourrait être:

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();
17
Scott

Création de documents

Il existe deux commandes principales pour créer des documents dans MongoDB:

  • insertOne()
  • insertMany()

Il existe également d'autres méthodes telles que les commandes Update. Nous appelons ces opérations des bouleversements. Les renversements se produisent lorsqu'il n'y a aucun document qui correspond au sélecteur utilisé pour identifier les documents.

Bien que MongoDB insère l'ID par ses propres moyens, nous pouvons également insérer manuellement des ID personnalisés en spécifiant le paramètre _id Dans les fonctions insert...().

Pour insérer plusieurs documents, nous pouvons utiliser insertMany() - qui prend un tableau de documents comme paramètre. Une fois exécuté, il renvoie plusieurs ids pour chaque document du tableau. Pour supprimer la collection, utilisez la commande drop(). Parfois, lors de l'insertion en bloc - nous pouvons insérer des valeurs en double. Plus précisément, si nous essayons d'insérer des _id En double, nous obtiendrons le duplicate key error:

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

MongoDB duplicate key error

MongoDB arrête d'insérer l'opération, s'il rencontre une erreur, pour supprimer cela - nous pouvons fournir le paramètre ordered:false. Ex:

 
 db.startup.insertMany (
 
 {_ id: "id1", nom: "Uber"}, 
 {_ id: " id2 ", nom:" Airbnb "}, 
 {_ id:" id1 ", nom:" Airbnb "}, 
, 
 {ordonné: faux} 
); 
3
student

Votre format d'enregistrement d'insertion comme dans MongoDB qui interroge se retire de n'importe quel EG source.

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

c'est mongodb 3.

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

if(!docList.isEmpty()){
    collectionCube.insertMany(docList);
}   
2
Hemang Rami