sql >> Database >  >> NoSQL >> MongoDB

Push-bewerkingen in MongoDB

1. Overzicht

In deze zelfstudie introduceren we hoe u documenten in een array in MongoDB kunt invoegen. Daarnaast zien we verschillende toepassingen van $push en $addToset operators om waarden toe te voegen aan een array.

Eerst maken we een voorbeelddatabase, een verzameling en voegen we er dummygegevens in. Verder zullen we een paar basisvoorbeelden bekijken om een ​​document bij te werken met de $push exploitant. Later bespreken we ook de verschillende gebruiksscenario's van $push en $addtoSet operators.

Laten we dieper ingaan op de verschillende methoden om documenten in een array in MongoDB in te voegen.

2. Database-initialisatie

Laten we eerst een nieuwe database opzetten baeldung en een voorbeeldcollectie, bestellingen :

use baeldung;
db.createCollection(orders);

Laten we nu een paar documenten aan de verzameling toevoegen met behulp van de insertMany methode:

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

In het geval van een succesvolle invoeging, zal de bovenstaande opdracht een JSON afdrukken die lijkt op de onderstaande:

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

Tot nu toe hebben we de database en verzameling met succes opgezet. We gebruiken deze database en verzameling voor alle voorbeelden.

3. Push-bewerking met Mongo Query

MongoDB biedt verschillende soorten array-operators om de arrays in MongoDB-documenten bij te werken. De $push operator in MongoDB voegt de waarde toe aan het einde van de array. Afhankelijk van het type zoekopdracht kunnen we de $push . gebruiken operator met methoden zoals updateOne , updateMany , findAndModify , enz.

Laten we nu kijken naar de shell-query met behulp van de $push operator:

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

De bovenstaande vraag levert het volgende document op:

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

Laten we nu het document controleren met customerId  1023. Hier kunnen we zien dat het nieuwe item wordt ingevoegd aan het einde van de lijst "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. Push-bewerking met Java-stuurprogrammacode

Tot nu toe hebben we de MongoDB-shellquery besproken om het document in een array te duwen. Laten we nu de push-update-query implementeren met behulp van de Java-code.

Voordat we de updatebewerking uitvoeren, moeten we eerst verbinding maken met de bestellingen collectie in de baeldung databank:

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

In dit geval maken we verbinding met MongoDB die draait op standaardpoort 27017 op localhost.

4.1. Het DBObject gebruiken

MongoDB Java-stuurprogramma biedt ondersteuning voor zowel de DBObject en BSON document. Hier, het DBObject maakt deel uit van het oude MongoDB-stuurprogramma, maar het is verouderd in de nieuwere versie van MongoDB.

Laten we nu kijken naar de Java-stuurprogrammacode om nieuwe waarden in de array in te voegen:

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

In de bovenstaande query hebben we eerst het itemdocument gemaakt met behulp van het BasicDBObject . Op basis van searchQuery, de documenten van de collectie worden gefilterd en de waarden worden in de array gepusht.

4.2. De BSON . gebruiken Document

De BSON Document is de nieuwe manier om toegang te krijgen tot het MongoDB-document in Java dat is gebouwd met de nieuwere clientstack. Het org.bson.Document klasse is minder ingewikkeld en gemakkelijker te gebruiken.

Laten we het org.bson.Document  . gebruiken class om waarden in de array "items" te duwen :

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

In dit geval is de implementatie van de BSON is vergelijkbaar met de code die wordt uitgevoerd met het DBObject, en de update zal ook hetzelfde zijn. Hier gebruikten we de updateOne methode om slechts één document bij te werken.

5. De addToSet . gebruiken Operator

De $addToSet operator kan ook worden gebruikt om een ​​waarde in de array te pushen. Deze operator voegt alleen waarden toe als die waarde niet in de array voorkomt. Anders negeert hij het gewoon. Terwijl de push-operator de waarde pusht als de voorwaarde om de match te filteren.

Een belangrijk punt om op te merken is de $addToSet operator pusht de waarde van het werk niet in het geval van een duplicaat item. Aan de andere kant, de $push-operator duwt de waarde gewoon in de array, ongeacht andere voorwaarden.

5.1. Shell-query met behulp van de addToSet Operator

De mongo shell-query van de $addToSet operator is vergelijkbaar met de $push operator, maar de $addToSet voegt de dubbele waarde niet in de array in.

Laten we nu de MongoDB-query bekijken om de waarden in een array te duwen met behulp van de $addToset :

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

In dit geval is de uitvoer als volgt:

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

In dit geval gebruikten we de $addToSet operator, en het document wordt alleen naar de array "items" gepusht als het uniek is.

5.2. Java-stuurprogramma met behulp van de addToSet Operator

De $addToSet operator biedt een ander type array-update-bewerking in vergelijking met de push-operator:

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

In de bovenstaande code hebben we eerst het document "item . gemaakt “, en op basis van de customerId filter, de updateOne methode zal proberen het document “item . te pushen ” in de array “items ".


  1. Meteor en DBrefs

  2. Transparante database-failover voor uw toepassingen

  3. Meerdere items tegelijk invoegen in een MongoDB-verzameling

  4. Snelste manier om dubbele documenten in mongodb te verwijderen