MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Operacje push w MongoDB

1. Przegląd

W tym samouczku przedstawimy, jak wstawiać dokumenty do tablicy w MongoDB. Ponadto zobaczymy różne zastosowania $push i $addToset operatorów do dodawania wartości do tablicy.

Najpierw utworzymy przykładową bazę danych, kolekcję i wstawimy do niej fałszywe dane. Ponadto przyjrzymy się kilku podstawowym przykładom aktualizacji dokumentu za pomocą przycisku $push operator. Później omówimy również różne przypadki użycia $push i $addtoSet operatorów.

Przyjrzyjmy się bliżej różnym metodom wstawiania dokumentów do tablicy w MongoDB.

2. Inicjalizacja bazy danych

Przede wszystkim skonfigurujmy nową bazę danych baeldung i zbiór próbek, zamówienia :

use baeldung;
db.createCollection(orders);

Dodajmy teraz kilka dokumentów do kolekcji za 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
            } 
          ]
    }
]);

W przypadku pomyślnego wstawienia powyższe polecenie spowoduje wydrukowanie JSON podobnego do pokazanego poniżej:

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

Do tej pory pomyślnie skonfigurowaliśmy bazę danych i zbiór. Użyjemy tej bazy danych i kolekcji dla wszystkich przykładów.

3. Operacja push przy użyciu zapytania Mongo

MongoDB udostępnia różne typy operatorów tablicowych do aktualizowania tablic w dokumentach MongoDB. Pchnięcie $ operator w MongoDB dołącza wartość na końcu tablicy. W zależności od typu zapytania możemy użyć przycisku $push operator z metodami takimi jak updateOne , aktualizacjaWiele , findAndModify itp.

Przyjrzyjmy się teraz zapytaniu powłoki za pomocą $push operator:

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

Powyższe zapytanie zwróci następujący dokument:

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

Sprawdźmy teraz dokument za pomocą identyfikatora klienta 1023. Tutaj widzimy, że nowy element jest wstawiany na końcu listy „elementy „:

{
    "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. Operacja Push przy użyciu kodu sterownika Java

Do tej pory omówiliśmy zapytanie powłoki MongoDB, aby umieścić dokument w tablicy. Zaimplementujmy teraz zapytanie o aktualizację wypychaną za pomocą kodu Java.

Przed wykonaniem operacji aktualizacji najpierw połączmy się z zamówieniami kolekcja w baeldung baza danych:

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

W tym przypadku łączymy się z MongoDB, które działa na domyślnym porcie 27017 na hoście lokalnym.

4.1. Korzystanie z DBObject

Sterownik MongoDB Java zapewnia obsługę obu DBObject i BSON dokument. Tutaj DBObject jest częścią starszego sterownika MongoDB, ale jest przestarzały w nowszej wersji MongoDB.

Przyjrzyjmy się teraz kodowi sterownika Java, aby wstawić nowe wartości do tablicy:

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

W powyższym zapytaniu najpierw utworzyliśmy dokument towaru przy użyciu BasicDBObject . Na podstawie searchQuery dokumenty kolekcji zostaną przefiltrowane, a wartości zostaną umieszczone w tablicy.

4.2. Korzystanie z BSON Dokument

BSON Dokument to nowy sposób uzyskiwania dostępu do dokumentu MongoDB w Javie, który jest tworzony przy użyciu nowszego stosu klienta. Dokument org.bson klasa jest mniej skomplikowana i łatwiejsza w użyciu.

Użyjmy org.bson.Document klasa do przekazywania wartości do tablicy „elementy” :

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

W tym przypadku implementacja BSON jest podobny do kodu uruchamianego przy użyciu DBObject, i aktualizacja również będzie taka sama. Tutaj użyliśmy updateOne metoda aktualizacji tylko jednego dokumentu.

5. Korzystanie z addToSet Operator

$addToSet Operator może być również użyty do wypchnięcia wartości do tablicy. Ten operator dodaje wartości tylko wtedy, gdy ta wartość nie istnieje w tablicy. W przeciwnym razie po prostu to zignoruje. Podczas gdy operator wypychania przesunie wartość jako warunek filtrowania, aby uzyskać dopasowanie.

Jednym z kluczowych punktów, na który należy zwrócić uwagę, jest $addToSet operator nie wypycha pracy wartości w przypadku zduplikowanego elementu. Z drugiej strony operator $push po prostu wstawia wartość do tablicy niezależnie od innych warunków.

5.1. Zapytanie powłoki za pomocą addToSet Operator

Zapytanie powłoki mongo $addToSet operator jest podobny do $push operator, ale $addToSet nie wstawia zduplikowanej wartości do tablicy.

Sprawdźmy teraz zapytanie MongoDB, aby przekazać wartości do tablicy za pomocą $addToset :

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

W takim przypadku wynik będzie następujący:

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

W tym przypadku użyliśmy $addToSet operatora, a dokument zostanie przeniesiony do tablicy „elementy” tylko wtedy, gdy jest unikalny.

5.2. Sterownik Java za pomocą addToSet Operator

$addToSet operator zapewnia inny typ operacji aktualizacji tablicy niż operator 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);

W powyższym kodzie najpierw utworzyliśmy dokument „item „ i na podstawie identyfikatora klienta filtr, updateOne Metoda spróbuje wypchnąć dokument „element ” do tablicy „elementy „.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Niebezpieczeństwa związane z indeksami budowlanymi na MongoDB

  2. Sprawdź istnienie kolekcji w MongoDB

  3. Dlaczego potrzebujemy „arbitra” w replikacji MongoDB?

  4. Wykryj, czy wartość zawiera co najmniej jedną cyfrę w SQL

  5. MongoDB / Pymongo Query z Datetime