java - insertar varios documentos en mongodb
Cómo insertar múltiples documentos a la vez en MongoDB a través de Java (5)
Estoy utilizando MongoDB en mi aplicación y fue necesario para insertar varios documentos dentro de una colección MongoDB. La versión que estoy usando es de 1.6
Vi un ejemplo aquí
http://docs.mongodb.org/manual/core/create/
en el
Sección de inserción de documentos múltiples a granel
Donde el autor estaba pasando una matriz para hacer esto.
Cuando intenté lo mismo, pero ¿por qué no está permitiendo, y por favor dígame cómo puedo insertar varios documentos a la vez?
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();
}
}
}
Por favor, hágamelo saber cuál es el camino para que pueda insertar múltiples documentos a la vez a través de Java.
Creando documentos
Hay dos comandos principales para crear documentos en MongoDB:
-
insertOne()
-
insertMany()
También hay otras formas, como los comandos de Update
. Llamamos a estas operaciones, posturas. Los resúmenes se producen cuando no hay documentos que coincidan con el selector utilizado para identificar documentos.
Aunque MongoDB inserta el ID por su cuenta, también podemos insertar manualmente ID personalizados especificando el parámetro _id
en las funciones de insert...()
.
Para insertar múltiples documentos, podemos usar insertMany()
- que toma una matriz de documentos como parámetro. Cuando se ejecuta, devuelve múltiples id
s para cada documento en la matriz. Para abandonar la colección, use el comando drop()
. Algunas veces, cuando realizamos inserciones masivas, podemos insertar valores duplicados. Específicamente, si intentamos insertar _id
s duplicados, obtendremos el duplicate key error
:
db.startup.insertMany( [ {_id:"id1", name:"Uber"}, {_id:"id2", name:"Airbnb"}, {_id:"id1", name:"Uber"}, ] );
MongoDB deja de insertar la operación, si encuentra un error, para suprimir eso - podemos suministrar el parámetro ordered:false
. Ex:
db.startup.insertMany( [ {_id:"id1", name:"Uber"}, {_id:"id2", name:"Airbnb"}, {_id:"id1", name:"Airbnb"}, ], {ordered: false} );
A partir de la versión MongoDB 2.6 y 2.12 del controlador, también puede realizar una operación de inserción masiva . En Java, puedes usar BulkWriteOperation . Un ejemplo de uso de esto podría ser:
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();
Antes de 3.0, puedes usar el siguiente código 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 está utilizando la versión 3.0 de mongodb , puede usar
MongoDatabase database = mongoClient.getDatabase("yourDB");
MongoCollection<Document> collection = database.getCollection("yourCollection");
collection.insertMany(yourDocumentList);
Su formato de registro de inserción como en MongoDB esa consulta se retira de cualquier fuente EG.
{
"_id" : 1,
"name" : a
}
{
"_id" : 2,
"name" : b,
}
es 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);
}
DBCollection.insert
acepta un parámetro de tipo DBObject
, List<DBObject>
o una matriz de DBObject
para insertar varios documentos a la vez. Estás pasando una matriz de cadenas.
Debe llenar manualmente los documentos ( DBObject
s), insertarlos en una List<DBObject>
o una matriz de DBObject
y eventualmente 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);
El fragmento anterior es esencialmente el mismo que el que emitirías en el shell MongoDB:
db.people.insert( [ {name: "Kiran", age: 20}, {name: "John"} ]);