MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Opérations push dans MongoDB

1. Présentation

Dans ce tutoriel, nous allons vous présenter comment insérer des documents dans un tableau dans MongoDB. De plus, nous verrons diverses applications de $push et $addToset opérateurs pour ajouter des valeurs dans un tableau.

Tout d'abord, nous allons créer un exemple de base de données, une collection, et y insérer des données factices. De plus, nous examinerons quelques exemples de base pour mettre à jour un document en utilisant le $push opérateur. Plus tard, nous aborderons également les différents cas d'utilisation de $push et $addtoSet opérateurs.

Plongeons en profondeur dans les différentes méthodes pour insérer des documents dans un tableau dans MongoDB.

2. Initialisation de la base de données

Tout d'abord, configurons une nouvelle base de données baeldung et une collection d'échantillons, commandes :

use baeldung;
db.createCollection(orders);

Ajoutons maintenant quelques documents à la collection en utilisant insertMany méthode :

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 cas d'insertion réussie, la commande ci-dessus imprimera un JSON similaire à celui illustré ci-dessous :

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

Jusqu'à présent, nous avons configuré avec succès la base de données et la collection. Nous utiliserons cette base de données et cette collection pour tous les exemples.

3. Opération Push à l'aide de Mongo Query

MongoDB fournit différents types d'opérateurs de tableau pour mettre à jour les tableaux dans les documents MongoDB. La $push L'opérateur dans MongoDB ajoute la valeur à la fin du tableau. Selon le type de requête, nous pouvons utiliser le $push opérateur avec des méthodes comme updateOne , updateMany , trouverEtModifier , etc.

Regardons maintenant la requête shell en utilisant le $push opérateur :

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

La requête ci-dessus renverra le document suivant :

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

Vérifions maintenant le document avec customerId  1023. Ici, on voit que le nouvel item est inséré à la fin de la liste « items " :

{
    "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. Opération Push à l'aide du code de pilote Java

Jusqu'à présent, nous avons discuté de la requête shell MongoDB pour pousser le document dans un tableau. Implémentons maintenant la requête de mise à jour push à l'aide du code Java.

Avant d'effectuer l'opération de mise à jour, connectons-nous d'abord aux commandes collecte dans le baeldung base de données :

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

Ici, dans ce cas, nous nous connectons à MongoDB qui s'exécute sur le port par défaut 27017 sur localhost.

4.1. Utilisation de DBObject

Le pilote Java MongoDB prend en charge à la fois DBObject et BSON document. Ici, le DBObject fait partie de l'ancien pilote MongoDB, mais il est obsolète dans la nouvelle version de MongoDB.

Examinons maintenant le code du pilote Java pour insérer de nouvelles valeurs dans le tableau :

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

Dans la requête ci-dessus, nous avons d'abord créé le document d'élément à l'aide de BasicDBObject . Sur la base de searchQuery, les documents de la collection seront filtrés, et les valeurs seront poussées dans le tableau.

4.2. Utiliser le BSON Documents

Le BSON Document est la nouvelle façon d'accéder au document MongoDB en Java qui est construit avec la nouvelle pile client. Le org.bson.Document la classe est moins compliquée et plus facile à utiliser.

Utilisons le org.bson.Document  class pour pousser les valeurs dans le tableau "items" :

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

Dans ce cas, la mise en œuvre du BSON est similaire au code exécuté à l'aide de DBObject, et la mise à jour sera également la même. Ici, nous avons utilisé le updateOne méthode pour mettre à jour un seul document.

5. Utilisation de addToSet Opérateur

Le $addToSet L'opérateur peut également être utilisé pour pousser une valeur dans le tableau. Cet opérateur ajoute des valeurs uniquement si cette valeur n'existe pas dans le tableau. Sinon, il l'ignorera simplement. Alors que l'opérateur push poussera la valeur comme condition pour filtrer obtenir la correspondance.

Un point clé à noter est le $addToSet L'opérateur ne pousse pas la valeur work dans le cas d'un élément en double. D'autre part, l'opérateur $push pousse simplement la valeur dans le tableau indépendamment de toute autre condition.

5.1. Requête Shell à l'aide de addToSet Opérateur

La requête mongo shell de $addToSet l'opérateur est similaire à $push opérateur, mais le $addToSet n'insère pas la valeur en double dans le tableau.

Voyons maintenant la requête MongoDB pour pousser les valeurs dans un tableau en utilisant le $addToset :

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

Dans ce cas, la sortie sera la suivante :

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

Dans ce cas, nous avons utilisé le $addToSet , et le document sera poussé vers le tableau "items" uniquement s'il est unique.

5.2. Pilote Java à l'aide de addToSet Opérateur

Le $addToSet fournit un type d'opération de mise à jour de tableau différent de l'opérateur push :

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

Dans le code ci-dessus, nous avons d'abord créé le document "item ", et sur la base du customerId filtre, le updateOne la méthode essaiera de pousser le document "item ” dans le tableau “items ".