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

J'utilise MongoDB dans mon application et il était nécessaire d'insérer plusieurs documents à l'intérieur d'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

En Vrac Insérer Plusieurs Documents

où l'auteur passait un tableau pour le faire .

Quand j'ai essayé la même chose , mais pourquoi il ne permet pas , et s'il vous plaît 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();
        }

    }

}

s'il vous Plaît laissez-moi savoir quel est le moyen pour que je puisse insérer plusieurs documents à la fois par le biais de java .

30
demandé sur Yves M. 2013-08-08 18:20:11

5 réponses

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

Vous devez remplir manuellement les documents(DBObjects), insérez-les à un List<DBObject> ou un tableau de DBObject s et éventuellement 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);

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"} ]);
39
répondu c.P.u1 2016-06-10 14:34:44

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.0 , vous pouvez utiliser

MongoDatabase database = mongoClient.getDatabase("yourDB");
            MongoCollection<Document> collection = database.getCollection("yourCollection");
            collection.insertMany(yourDocumentList);
19
répondu Vins 2015-12-03 18:01:50

A partir de la version 2.6 et 2.12 du pilote, vous pouvez aussi maintenant faire un opération d'insertion en bloc. En Java, vous pouvez utiliser le BulkWriteOperation. Un exemple d'utilisation de ce pourrait être la suivante:

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
répondu Scott 2014-05-29 20:56:48

Création De Documents

il y a deux commandes principales pour créer des documents en MongoDB:

  • insertOne()
  • insertMany()

Il y a d'autres moyens tels que Update commandes. Nous appelons ces opérations, upserts. Upserts se produit quand il n'y a pas de documents qui correspondent à la sélecteur utilisé pour identifier les documents.

bien que MongoDB insère ID par son propre, nous pouvons insérer manuellement custom Id ainsi en spécifiant _id paramètre insert...() fonctions.

Pour insérer plusieurs documents, nous pouvons utiliser insertMany() - qui prend un tableau de documents comme paramètre. Lorsqu'il est exécuté, il retourne plusieurs id s pour chaque document du tableau. Pour supprimer la collection, utilisez drop() la commande. Parfois, en faisant des inserts en vrac - nous pouvons insérer des valeurs dupliquées. Plus précisément, si nous essayons d'insérer dupliquer _ids, nous allons obtenir la duplicate key error:


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

MongoDB duplicate key error

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


db.startup.insertMany(
[
{_id:"id1", name:"Uber"},
{_id:"id2", name:"Airbnb"},
{_id:"id1", name:"Airbnb"},
],
{ordered: false}
);
2
répondu student 2016-08-29 18:50:34

votre insert enregistrer le format comme dans MongoDB que la requête retirer de n'importe quelle source Par exemple.

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

c'est 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);
}   
2
répondu Hemang Rami 2017-07-19 21:04:30