sql >> Databáze >  >> NoSQL >> MongoDB

Push Operations v MongoDB

1. Přehled

V tomto tutoriálu si představíme, jak vložit dokumenty do pole v MongoDB. Kromě toho uvidíme různé aplikace $push a $addToset operátory pro přidání hodnot do pole.

Nejprve vytvoříme ukázkovou databázi, kolekci a vložíme do ní fiktivní data. Dále se podíváme na několik základních příkladů aktualizace dokumentu pomocí $push operátor. Později také probereme různé případy použití $push a $addtoSet operátory.

Pojďme se hlouběji ponořit do různých metod vkládání dokumentů do pole v MongoDB.

2. Inicializace databáze

Nejprve si nastavíme novou databázi baeldung a ukázková kolekce, objednávky :

use baeldung;
db.createCollection(orders);

Pojďme nyní přidat několik dokumentů do sbírky pomocí insertMany metoda:

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

V případě úspěšného vložení vypíše výše uvedený příkaz JSON podobný tomu, který je zobrazen níže:

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

Doposud jsme úspěšně založili databázi a kolekci. Tuto databázi a kolekci použijeme pro všechny příklady.

3. Push Operation pomocí Mongo Query

MongoDB poskytuje různé typy operátorů polí pro aktualizaci polí v dokumentech MongoDB. $push operátor v MongoDB připojí hodnotu na konec pole. V závislosti na typu dotazu můžeme použít $push operátor s metodami jako updateOne , updateMany , findAndModify , atd.

Podívejme se nyní na dotaz shellu pomocí $push operátor:

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

Výše uvedený dotaz vrátí následující dokument:

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

Pojďme nyní zkontrolovat dokument pomocí customerId  1023. Zde vidíme, že nová položka je vložena na konec seznamu „položky “:

{
    "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 Operation pomocí Java Driver Code

Doposud jsme diskutovali o dotazu shellu MongoDB pro vložení dokumentu do pole. Pojďme nyní implementovat dotaz push aktualizace pomocí kódu Java.

Před provedením operace aktualizace se nejprve připojte k objednávkám sbírka v baeldung databáze:

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

Zde se v tomto případě připojujeme k MongoDB, která běží na výchozím portu 27017 na localhost.

4.1. Pomocí DBOobject

Ovladač MongoDB Java poskytuje podporu pro DBObject a BSON dokument. Zde DBOobject je součástí staršího ovladače MongoDB, ale je v novější verzi MongoDB zastaralý.

Podívejme se nyní na kód ovladače Java pro vložení nových hodnot do pole:

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

Ve výše uvedeném dotazu jsme nejprve vytvořili dokument položky pomocí BasicDBObject . Na základě searchQuery dokumenty kolekce budou filtrovány a hodnoty budou vloženy do pole.

4.2. Pomocí BSON Dokument

BSON Document je nový způsob přístupu k dokumentu MongoDB v Javě, který je vytvořen s novějším klientským stackem. org.bson.Document třída je méně komplikovaná a snáze se používá.

Použijme org.bson.Document  třídy pro vložení hodnot do pole „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));

V tomto případě implementace BSON je podobný kódu spouštěnému pomocí DBObject, a aktualizace bude také stejná. Zde jsme použili updateOne způsob aktualizace pouze jednoho dokumentu.

5. Pomocí addToSet Operátor

$addToSet operátor lze také použít k vložení hodnoty do pole. Tento operátor přidává hodnoty pouze v případě, že tato hodnota v poli neexistuje. Jinak to prostě bude ignorovat. Zatímco operátor push vloží hodnotu jako podmínku pro získání shody.

Jedním z klíčových bodů, které je třeba poznamenat, je $addToSet operátor neposílá hodnotu práce v případě duplicitní položky. Na druhé straně operátor $push pouze vloží hodnotu do pole bez ohledu na jakékoli další podmínky.

5.1. Shell Query pomocí addToSet Operátor

Dotaz mongo shellu $addToSet operátor je podobný $push operátor, ale $addToSet nevloží duplicitní hodnotu do pole.

Pojďme se nyní podívat na dotaz MongoDB, který vloží hodnoty do pole pomocí $addToset :

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

V tomto případě bude výstup následující:

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

V tomto případě jsme použili $addToSet operátor a dokument se přesune do pole „items“ pouze v případě, že je jedinečný.

5.2. Ovladač Java pomocí addToSet Operátor

$addToSet operátor poskytuje jiný typ operace aktualizace pole ve srovnání s operátorem 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);

Ve výše uvedeném kódu jsme nejprve vytvořili dokument „item “ a na základě customerId filtr, updateOne metoda se pokusí vložit dokument „položka ” do pole „položky “.


  1. Jak udělat GROUP BY v Redis

  2. Mongoose TypeError:Uživatel není konstruktor

  3. vysvětlit() v Mongodb:rozdíly mezi nscanned a nscannedObjects

  4. mongo:návrat se nerovná count()