sql >> Base de Datos >  >> NoSQL >> MongoDB

Operaciones de inserción en MongoDB

1. Resumen

En este tutorial, presentaremos cómo insertar documentos en una matriz en MongoDB. Además, veremos varias aplicaciones de $push y $addToset operadores para agregar valores a una matriz.

Primero, crearemos una base de datos de muestra, una colección, e insertaremos datos ficticios en ella. Además, veremos algunos ejemplos básicos para actualizar un documento usando $push operador. Más adelante, también discutiremos los diversos casos de uso de $push y $addtoSet operadores.

Profundicemos en los diversos métodos para insertar documentos en una matriz en MongoDB.

2. Inicialización de la base de datos

En primer lugar, configuremos una nueva base de datos baeldung y una colección de muestras, pedidos :

use baeldung;
db.createCollection(orders);

Ahora agreguemos algunos documentos a la colección usando insertMany método:

db.orders.insertMany([
    {
        "customerId": 1023,
        "orderTimestamp": NumberLong("1646460073000"),
        "shippingDestination": "336, Street No.1 Pawai Mumbai",
        "purchaseOrder": 1000,
        "contactNumber":"9898987676",
        "items": [ 
            {
                "itemName": "BERGER",
                "quantity": 1,
                "price": 500
            },
            {
                "itemName": "VEG PIZZA",
                "quantity": 1,
                "price": 800
            } 
          ]
    },
    {
        "customerId": 1027,
        "orderTimestamp": NumberLong("1646460087000"),
        "shippingDestination": "445, Street No.2 Pawai Mumbai",
        "purchaseOrder": 2000,
        "contactNumber":"9898987676",
        "items": [ 
            {
               "itemName": "BERGER",
               "quantity": 1,
               "price": 500
            },
            {
               "itemName": "NON-VEG PIZZA",
               "quantity": 1,
               "price": 1200
            } 
          ]
    }
]);

En caso de una inserción exitosa, el comando anterior imprimirá un JSON similar al que se muestra a continuación:

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("622300cc85e943405d04b567"),
	ObjectId("622300cc85e943405d04b568")
    ]
}

Hasta ahora, hemos configurado con éxito la base de datos y la colección. Usaremos esta base de datos y colección para todos los ejemplos.

3. Operación de inserción con Mongo Query

MongoDB proporciona varios tipos de operadores de matrices para actualizar las matrices en los documentos de MongoDB. El empuje de $ El operador en MongoDB agrega el valor al final de la matriz. Dependiendo del tipo de consulta, podemos usar $push operador con métodos como updateOne , actualizarmuchos , buscar y modificar , etc.

Ahora veamos la consulta de shell usando $push operador:

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $push: {
            "items":{
                "itemName": "PIZZA MANIA",
                "quantity": 1,
                "price": 800
            }
        }
    });

La consulta anterior devolverá el siguiente documento:

{
    "acknowledged":true,
    "matchedCount":1,
    "modifiedCount":1
}

Ahora revisemos el documento con customerId  1023. Aquí, podemos ver que el nuevo artículo se inserta al final de la lista “artículos “:

{
    "customerId" : 1023,
    "orderTimestamp" : NumberLong("1646460073000"),
    "shippingDestination" : "336, Street No.1 Pawai Mumbai",
    "purchaseOrder" : 1000,
    "contactNumber" : "9898987676",
    "items" : [
        {
            "itemName" : "BERGER",
            "quantity" : 1,
	    "price" : 500
        },
	{
            "itemName" : "VEG PIZZA",
	    "quantity" : 1,
	    "price" : 800
	},
	{
	    "itemName" : "PIZZA MANIA",
	    "quantity" : 1,
	    "price" : 800
        }
    ]
}

4. Operación de inserción mediante el código del controlador Java

Hasta ahora, hemos discutido la consulta de shell de MongoDB para insertar el documento en una matriz. Ahora implementemos la consulta de actualización automática utilizando el código Java.

Antes de realizar la operación de actualización, primero conectemos a los pedidos colección en el baeldung base de datos:

mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("orders");

Aquí, en este caso, nos estamos conectando a MongoDB que se ejecuta en el puerto predeterminado 27017 en localhost.

4.1. Uso de DBObject

El controlador MongoDB Java brinda soporte para DBObject y BSON documento. Aquí, el DBObject es parte del controlador heredado de MongoDB, pero está en desuso en la versión más reciente de MongoDB.

Veamos ahora el código del controlador de Java para insertar nuevos valores en la matriz:

DBObject listItem = new BasicDBObject("items", new BasicDBObject("itemName", "PIZZA MANIA")
  .append("quantity", 1)
  .append("price", 800));
BasicDBObject searchFilter = new BasicDBObject("customerId", 1023);
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.append("$push", listItem);
UpdateResult updateResult = collection.updateOne(searchFilter, updateQuery);

En la consulta anterior, primero creamos el documento del elemento usando el BasicDBObject . Sobre la base de searchQuery, los documentos de la colección se filtrarán y los valores se insertarán en la matriz.

4.2. Uso de BSON Documento

El BSON El documento es la nueva forma de acceder al documento MongoDB en Java que se crea con la pila de cliente más nueva. El org.bson.Documento La clase es menos complicada y más fácil de usar.

Usemos el org.bson.Document  clase para insertar valores en la matriz "elementos" :

Document item = new Document()
  .append("itemName1", "PIZZA MANIA")
  .append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection.updateOne(Filters.eq("customerId", 1023), Updates.push("items", item));

En este caso, la implementación del BSON es similar al código ejecutado usando DBObject, y la actualización también será la misma. Aquí, usamos el updateOne método para actualizar un solo documento.

5. Uso de addToSet Operador

El $addToSet El operador también se puede usar para insertar un valor en la matriz. Este operador agrega valores solo si ese valor no existe en la matriz. De lo contrario, simplemente lo ignorará. Mientras que el operador push empujará el valor como condición para filtrar obtener la coincidencia.

Un punto clave a tener en cuenta es el $addToSet el operador no empuja el trabajo de valor en el caso de un elemento duplicado. Por otro lado, el operador $push simplemente inserta el valor en la matriz independientemente de cualquier otra condición.

5.1. Consulta de shell con addToSet Operador

La consulta de shell mongo del $addToSet El operador es similar al $push operador, pero el $addToSet no inserta el valor duplicado en la matriz.

Ahora veamos la consulta de MongoDB para insertar los valores en una matriz usando $addToset :

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $addToSet: {
            "items":{
                "itemName": "PASTA",
                "quantity": 1,
                "price": 1000
            }
        }
    });

En este caso, la salida será la siguiente:

{
    "acknowledged":true,
    "matchedCount":1,
    "modifiedCount":1
}

En este caso, usamos el $addToSet operador, y el documento se enviará a la matriz "elementos" solo si es único.

5.2. Controlador Java con addToSet Operador

El $addToSet El operador proporciona un tipo diferente de operación de actualización de matriz en comparación con el operador de inserción:

Document item = new Document()
  .append("itemName1", "PIZZA MANIA")
  .append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection
  .updateOne(Filters.eq("customerId", 1023), Updates.addToSet("items", item));
System.out.println("updateResult:- " + updateResult);

En el código anterior, primero, creamos el documento “item “, y sobre la base del customerId filtro, el updateOne El método intentará enviar el documento "elemento ” en la matriz “elementos “.