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 „.