sql >> Database teknologi >  >> NoSQL >> MongoDB

Push-operationer i MongoDB

1. Oversigt

I denne vejledning introducerer vi, hvordan du indsætter dokumenter i et array i MongoDB. Derudover vil vi se forskellige applikationer af $push og $addToset operatorer til at tilføje værdier til en matrix.

Først opretter vi en prøvedatabase, en samling og indsætter dummy-data i den. Yderligere vil vi se på et par grundlæggende eksempler for at opdatere et dokument ved hjælp af $push operatør. Senere vil vi også diskutere de forskellige anvendelsestilfælde af $push og $addtoSet operatører.

Lad os dykke dybt ned i de forskellige metoder til at indsætte dokumenter i en matrix i MongoDB.

2. Databaseinitialisering

Først og fremmest, lad os oprette en ny database baeldung og en prøvesamling, ordrer :

use baeldung;
db.createCollection(orders);

Lad os nu tilføje et par dokumenter til samlingen ved at bruge insertMany metode:

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

I tilfælde af vellykket indsættelse vil ovenstående kommando udskrive en JSON svarende til den, der er vist nedenfor:

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

Indtil nu har vi med succes opsat databasen og samlingen. Vi bruger denne database og samling til alle eksemplerne.

3. Push-operation ved hjælp af Mongo Query

MongoDB giver forskellige typer array-operatorer til at opdatere arrays i MongoDB-dokumenter. $push operator i MongoDB tilføjer værdien i slutningen af ​​arrayet. Afhængigt af typen af ​​forespørgsel kan vi bruge $push operatør med metoder som updateOne , updateMany , findAndModify osv.

Lad os nu se på shell-forespørgslen ved hjælp af $push operatør:

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

Ovenstående forespørgsel vil returnere følgende dokument:

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

Lad os nu tjekke dokumentet med customerId  1023. Her kan vi se, at det nye element er indsat i slutningen af ​​listen "emner “:

{
    "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. Push-betjening ved hjælp af Java-driverkode

Indtil nu har vi diskuteret MongoDB shell-forespørgslen for at skubbe dokumentet ind i et array. Lad os nu implementere push update-forespørgslen ved hjælp af Java-koden.

Før vi udfører opdateringshandlingen, skal vi først oprette forbindelse til ordrerne samling i baeldung database:

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

Her, i dette tilfælde, forbinder vi til MongoDB, som kører på standardport 27017 på localhost.

4.1. Brug af DBObject

MongoDB Java-driver understøtter både DBObject og BSON dokument. Her er DBObject er en del af den ældre MongoDB-driver, men den er forældet i den nyere version af MongoDB.

Lad os nu se på Java-driverkoden for at indsætte nye værdier i arrayet:

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

I ovenstående forespørgsel oprettede vi først varedokumentet ved hjælp af BasicDBObject . På baggrund af searchQuery, samlingens dokumenter vil blive filtreret, og værdierne vil blive skubbet ind i arrayet.

4.2. Brug af BSON Dokument

BSON Document er den nye måde at få adgang til MongoDB-dokumentet i Java, som er bygget med den nyere klientstak. org.bson.Document klasse er mindre kompliceret og nemmere at bruge.

Lad os bruge org.bson.Document  klasse for at skubbe værdier ind i arrayet "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));

I dette tilfælde implementeringen af ​​BSON ligner koden, der køres ved hjælp af DBObject, og opdateringen vil også være den samme. Her brugte vi updateOne metode til kun at opdatere et enkelt dokument.

5. Brug af addToSet Operatør

$addToSet operator kan også bruges til at skubbe en værdi i arrayet. Denne operator tilføjer kun værdier, hvis denne værdi ikke findes i arrayet. Ellers vil den bare ignorere det. Hvorimod push-operatøren vil skubbe værdien som betingelsen for at filtrere for at få matchet.

Et vigtigt punkt at bemærke er $addToSet operatøren presser ikke værdiarbejdet i tilfælde af en dubletvare. På den anden side er $push-operatoren skubber bare værdien ind i arrayet uanset andre forhold.

5.1. Shell-forespørgsel ved hjælp af addToSet Operatør

Mongo-shell-forespørgslen i $addToSet operatoren ligner $push operatoren, men $addToSet indsætter ikke den duplikerede værdi i arrayet.

Lad os nu tjekke MongoDB-forespørgslen for at skubbe værdierne ind i et array ved hjælp af $addToset :

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

I dette tilfælde vil outputtet være som følger:

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

I dette tilfælde brugte vi $addToSet operatør, og dokumentet vil kun blive skubbet til array "elementer", hvis det er unikt.

5.2. Java-driver ved hjælp af addToSet Operatør

$addToSet operatoren giver en anden type array-opdateringsoperation sammenlignet med push-operatoren:

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

I ovenstående kode oprettede vi først dokumentet "item “, og på grundlag af customerId filter, updateOne metode vil forsøge at skubbe dokumentet "item ” ind i arrayet “items “.


  1. Sådan optimeres ydeevnen af ​​MongoDB

  2. MongoDB-forespørgsel med elemMatch til indlejrede array-data

  3. ved hjælp af en variabel i mongodb update

  4. Introduktion til Apache HBase Snapshots, del 2:Deeper Dive