MongoDB
Wprowadzenie
MongoDB to dokumentowa baza danych NoSQL. Zamiast tabel i wierszy dane przechowywane są w dokumentach w formacie zbliżonym do JSON, co zapewnia dużą elastyczność modelu danych.
Netuno udostępnia zasób _mongo do integracji z MongoDB, z niskokodową abstrakcją nad oficjalnym klientem MongoDB dla Javy, dostępną dla różnych języków programowania obsługiwanych przez Netuno: JavaScript, Python, Ruby, Kotlin i Groovy.
Przed rozpoczęciem zaleca się zapoznanie z tworzeniem usług w Netuno — zobacz tutorial REST - Usługi sieciowe.
Przykład implementacji przedstawionych tutaj operacji znajduje się w usłudze przykładowej mongo.js, zlokalizowanej w:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
apps/demo/server/services/samples/javascript/mongo.js
apps/demo/server/services/samples/javascript/mongo.ts
apps/demo/server/services/samples/javascript/mongo.py
apps/demo/server/services/samples/javascript/mongo.rb
apps/demo/server/services/samples/javascript/mongo.kts
apps/demo/server/services/samples/javascript/mongo.groovy
Instalacja MongoDB
Za pomocą Docker
Zakładając, że masz zainstalowany Docker, wystarczy pobrać obraz MongoDB i uruchomić nowy kontener:
docker pull mongo
docker run -d --name mongo -p 27017:27017 mongo
W ten sposób MongoDB jest dostępny pod adresem localhost:27017 bez uwierzytelniania.
Aby utworzyć użytkownika bazy danych zgodnie z konfiguracją aplikacji, wykonaj:
docker exec -it mongo mongosh produkty_db --eval 'db.createUser({ user: "produkty_uzytkownik", pwd: "12345678", roles: [{ role: "readWrite", db: "produkty_db" }] })'
Za pomocą Ubuntu
MongoDB nie jest dostępny w oficjalnych repozytoriach Ubuntu, dlatego przed instalacją trzeba dodać oficjalne repozytorium:
sudo apt-get install gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
Po instalacji możesz uruchomić usługę za pomocą:
sudo systemctl start mongod
Za pomocą Windows
Uruchom pobrany instalator i w kroku Service Configuration włącz Install MongoD as a Service, aby MongoDB uruchamiał się automatycznie. MongoDB będzie dostępny pod adresem localhost:27017 bez uwierzytelniania.
Zapoznaj się z oficjalną dokumentacją MongoDB, aby poznać inne dystrybucje i wersje.
Konfiguracja aplikacji
Konfiguracja połączeń MongoDB odbywa się w pliku konfiguracyjnym aplikacji, w zależności od środowiska:
config/_development.json
Dowiedz się więcej o plikach konfiguracyjnych aplikacji.
W pliku konfiguracyjnym dodaj blok mongo, w którym każdy klucz identyfikuje jedno połączenie:
{
...
"mongo": {
"sklep": "mongodb://sklep_uzytkownik:12345678@localhost/sklep_db",
"produkty": {
"username": "produkty_uzytkownik",
"password": "12345678",
"host": "127.0.0.1",
"port": "27017",
"database": "produkty_db"
}
},
...
}
Połączenie można zdefiniować na dwa sposoby:
- Jako URL połączenia — wartość jest po prostu ciągiem znaków, na przykład
"mongodb://sklep_uzytkownik:12345678@localhost/sklep_db". - Jako obiekt konfiguracji — z polami:
url— jeśli zdefiniowany, jest używany bezpośrednio jako URL połączenia, z pominięciem pozostałych pól.protocol— protokół połączenia, domyślniemongodb.usernameipassword— dane uwierzytelniające.host— adres serwera, domyślnielocalhost.port— port połączenia, domyślnie27017.database— nazwa bazy danych, domyślnie nazwa klucza połączenia.params— dodatkowe parametry połączenia dołączane do URL, na przykład{ "authSource": "admin" }. Stosowane są wyłącznie wtedy, gdy URL jest budowany z pól obiektu.
Połączenie nie musi dotyczyć głównej bazy danych aplikacji. W przeciwieństwie do konfiguracji
dbblokmongojest niezależny i pozwala na wiele równoczesnych połączeń.
Inicjalizacja połączenia
Pierwszym krokiem jest zainicjalizowanie klienta MongoDB za pomocą zasobu _mongo.init(...), przekazując nazwę klucza konfiguracji lub bezpośrednio URL połączenia:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mongo = _mongo.init("produkty")
const mongo = _mongo.init("produkty")
mongo = _mongo.init("produkty")
mongo = _mongo.init("produkty")
val mongo = _mongo.init("produkty")
def mongo = _mongo.init("produkty")
Możesz też zainicjalizować połączenie bezpośrednio za pomocą URL:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
const mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
val mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
def mongo = _mongo.init("mongodb://localhost:27017/produkty_db")
Przy wywołaniu
_mongo.init()bez argumentów używany jest klucz konfiguracjidefault. Zaleca się, aby zawsze podawać nazwę klucza lub URL, dzięki czemu używane połączenie jest jednoznaczne.
Baza danych i kolekcje
Po zainicjalizowaniu klienta pobierz instancję bazy danych za pomocą database("nazwa"). Następnie możesz tworzyć kolekcje i uzyskiwać dostęp do istniejącej kolekcji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const baza = mongo.database("produkty_db")
baza.createCollection("produkt")
const kolekcja = baza.collection("produkt")
const baza = mongo.database("produkty_db")
baza.createCollection("produkt")
const kolekcja = baza.collection("produkt")
baza = mongo.database("produkty_db")
baza.createCollection("produkt")
kolekcja = baza.collection("produkt")
baza = mongo.database("produkty_db")
baza.createCollection("produkt")
kolekcja = baza.collection("produkt")
val baza = mongo.database("produkty_db")
baza.createCollection("produkt")
val kolekcja = baza.collection("produkt")
def baza = mongo.database("produkty_db")
baza.createCollection("produkt")
def kolekcja = baza.collection("produkt")
Możesz przetestować połączenie z bazą danych za pomocą ping() i wylistować wszystkie istniejące kolekcje za pomocą collectionNames():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
baza.ping()
const nazwy = baza.collectionNames()
baza.ping()
const nazwy = baza.collectionNames()
baza.ping()
nazwy = baza.collectionNames()
baza.ping()
nazwy = baza.collectionNames()
baza.ping()
val nazwy = baza.collectionNames()
baza.ping()
def nazwy = baza.collectionNames()
Możesz zmienić nazwę kolekcji za pomocą renameCollection(), przekazując pełną nazwę wraz z bazą danych albo osobno nazwę bazy danych i nową nazwę kolekcji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
kolekcja.renameCollection("produkty_db.produkt_archiwum")
kolekcja.renameCollection("archiwum_db", "produkt_archiwum")
Aby usunąć kolekcję i wszystkie jej dokumenty, użyj drop():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.drop()
kolekcja.drop()
kolekcja.drop()
kolekcja.drop()
kolekcja.drop()
kolekcja.drop()
Wstawianie dokumentów
Dane są reprezentowane za pomocą zasobu _val, poprzez _val.map() dla dokumentów i _val.list() dla list wartości.
Wstawianie pojedynczego dokumentu
Za pomocą insertOne() wstawiasz dokument i otrzymujesz wygenerowane ID:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
const id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
val id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
def id = kolekcja.insertOne(
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 22)
.set("cena", 100)
.set("kategoria", "komputery")
)
Dokumenty mogą zawierać struktury zagnieżdżone, takie jak listy i inne dokumenty:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
kolekcja.insertOne(
_val.map()
.set("nazwa", "Tablet")
.set("tagi",
_val.list()
.add("promocja")
.add("nowy")
)
.set("szczegoly",
_val.map()
.set("kolor", "niebieski")
.set("stan", 10)
)
)
Wstawianie wielu dokumentów
Za pomocą insertMany() wstawiasz kilka dokumentów naraz, otrzymując listę wygenerowanych ID:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
const ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
val ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
def ids = kolekcja.insertMany(
_val.list()
.add(
_val.map()
.set("nazwa", "Smartfon")
.set("ilosc", 18)
)
.add(
_val.map()
.set("nazwa", "Monitor")
.set("ilosc", 8)
)
)
Wyszukiwanie dokumentów
Metoda find() zwraca MongoFindIterable, z którego pobierasz dokumenty za pomocą all() (wszystkie) lub first() (pierwszy albo null, jeśli nie ma żadnego).
Aby pobrać wszystkie dokumenty z kolekcji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().all()
const dokumenty = kolekcja.find().all()
dokumenty = kolekcja.find().all()
dokumenty = kolekcja.find().all()
val dokumenty = kolekcja.find().all()
def dokumenty = kolekcja.find().all()
Aby wyszukać z filtrem, użyj fabryki _mongo.filters():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
const dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
val dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
def dokumenty = kolekcja.find(
_mongo.filters().eq("nazwa", "Laptop")
).all()
Filtry
Fabryka _mongo.filters() udostępnia najważniejsze operatory zapytań MongoDB:
| Operator | Opis |
|---|---|
eq("pole", wartosc) | Równe wartości. |
ne("pole", wartosc) | Różne od wartości. |
gt("pole", wartosc) | Większe niż wartość. |
gte("pole", wartosc) | Większe lub równe wartości. |
lt("pole", wartosc) | Mniejsze niż wartość. |
lte("pole", wartosc) | Mniejsze lub równe wartości. |
in("pole", wartosc1, wartosc2, ...) | Równe którejkolwiek z wartości. |
nin("pole", wartosc1, wartosc2, ...) | Różne od wszystkich wartości. |
and(filtr1, filtr2, ...) | Odpowiada wszystkim filtrom. |
or(filtr1, filtr2, ...) | Odpowiada co najmniej jednemu z filtrów. |
not(filtr) | Nie odpowiada filtrowi. |
regex("pole", "wzorzec") | Odpowiada wyrażeniu regularnemu. |
exists("pole") | Pole istnieje w dokumencie. |
text("wyszukiwanie") | Wyszukiwanie tekstowe. |
type("pole", "typ") | Pole jest określonego typu. |
mod("pole", dzielnik, reszta) | Reszta z dzielenia wartości pola przez dzielnik jest równa podanej wartości. |
where("wyrażenie") | Odpowiada dokumentom spełniającym wyrażenie JavaScript, na przykład "this.cena > 100". |
size("pole", n) | Pole tablicowe ma dokładnie n elementów. |
Na przykład, aby pobrać produkty o cenie wyższej niż 50 i ilości mniejszej niż 30:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
const dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
val dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
def dokumenty = kolekcja.find(
_mongo.filters().and(
_mongo.filters().gt("cena", 50),
_mongo.filters().lt("ilosc", 30)
)
).all()
Lub aby pobrać produkty, których nazwa odpowiada wyrażeniu regularnemu:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
const dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
val dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
def dokumenty = kolekcja.find(
_mongo.filters().regex("nazwa", "^[LS]")
).all()
Iterowanie po wynikach
Dzięki wynikowi zapytania możesz iterować po wszystkich znalezionych dokumentach:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
for (const dokument of kolekcja.find().all()) {
_out.println(dokument.getString("nazwa"))
}
for (const dokument of kolekcja.find().all()) {
_out.println(dokument.getString("nazwa"))
}
for dokument in kolekcja.find().all():
_out.println(dokument.getString("nazwa"))
kolekcja.find().all().each do |dokument|
_out.println(dokument.getString("nazwa"))
end
for (dokument in kolekcja.find().all()) {
_out.println(dokument.getString("nazwa"))
}
for (dokument in kolekcja.find().all()) {
_out.println(dokument.getString("nazwa"))
}
Możesz też iterować po wynikach za pomocą forEach(), przekazując funkcję:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.find().forEach((dokument) =>
_out.println(dokument.getString("nazwa"))
)
kolekcja.find().forEach((dokument) =>
_out.println(dokument.getString("nazwa"))
)
kolekcja.find().forEach(
lambda dokument: _out.println(dokument.getString("nazwa"))
)
kolekcja.find().forEach do |dokument|
_out.println(dokument.getString("nazwa"))
end
kolekcja.find().forEach { dokument ->
_out.println(dokument.getString("nazwa"))
}
kolekcja.find().forEach { dokument ->
_out.println(dokument.getString("nazwa"))
}
Sortowanie
Za pomocą fabryki _mongo.sorts() definiujesz kolejność wyników, rosnąco lub malejąco:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
const dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
val dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
def dokumenty = kolekcja.find().sort(
_mongo.sorts().descending("cena")
).all()
Aby sortować według kilku pól, użyj orderBy():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
const dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
val dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
def dokumenty = kolekcja.find().sort(
_mongo.sorts().orderBy(
_mongo.sorts().descending("cena"),
_mongo.sorts().ascending("ilosc")
)
).all()
Projekcja pól
Za pomocą fabryki _mongo.projections() ograniczasz pola zwracane w dokumentach:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
const dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
val dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
def dokumenty = kolekcja.find().projection(
_mongo.projections().include("nazwa", "ilosc")
).all()
Aby połączyć kilka projekcji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
const dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
val dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
def dokumenty = kolekcja.find().projection(
_mongo.projections().fields(
_mongo.projections().include("nazwa", "ilosc"),
_mongo.projections().excludeId()
)
).all()
Dostępne typy projekcji są następujące:
| Projekcja | Opis |
|---|---|
include("pole", ...) | Zawiera tylko określone pola. |
exclude("pole", ...) | Wyklucza określone pola. |
excludeId() | Wyklucza pole _id. |
fields(projekcja1, ...) | Łączy projekcje. |
slice("pole", n) | Zawiera tylko pierwsze n elementów pola tablicowego. |
slice("pole", przesuniecie, n) | Zawiera n elementów pola tablicowego, począwszy od elementów po pierwszych przesuniecie elementach. |
elemMatch("pole") | Zawiera tylko pierwszy element pola tablicowego. |
elemMatch("pole", filtr) | Zawiera tylko pierwszy element tablicy odpowiadający filtrowi. |
computed("pole", wyrażenie) | Dodaje pole obliczane na podstawie wyrażenia agregacji. |
Limity i pomijanie
Za pomocą limit() i skip() kontrolujesz liczbę zwracanych wyników:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
const dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
val dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
def dokumenty = kolekcja.find()
.skip(1)
.limit(2)
.all()
Aktualizacja dokumentów
Za pomocą fabryki _mongo.updates() definiujesz zmiany do zastosowania, a za pomocą updateOne() lub updateMany() stosujesz je w dokumentach odpowiadających filtrowi:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
kolekcja.updateMany(
_mongo.filters().eq("kategoria", "komputery"),
_mongo.updates().set("kategoria", "polecane")
)
Fabryka _mongo.updates() udostępnia operatory aktualizacji:
| Operator | Opis |
|---|---|
set("pole", wartosc) | Ustawia wartość pola. |
unset("pole") | Usuwa pole z dokumentu. |
rename("pole", "nowaNazwa") | Zmienia nazwę pola. |
push("pole", wartosc) | Dodaje wartość do tablicy. |
combine(aktualizacja1, aktualizacja2, ...) | Łączy kilka aktualizacji w jedną. |
Aby zastosować kilka zmian naraz, użyj combine():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
const polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
val polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
def polaczone = _mongo.updates().combine(
_mongo.updates().set("ilosc", 42),
_mongo.updates().rename("inne", "wiecej")
)
kolekcja.updateOne(
_mongo.filters().eq("nazwa", "Laptop"),
polaczone
)
Znajdowanie i aktualizacja
Za pomocą findOneAndUpdate() znajdujesz i aktualizujesz dokument atomowo, zwracając oryginalny dokument (lub null, jeśli nie ma żadnego):
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
const stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
val stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
def stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Laptop"),
_mongo.updates().set("ilosc", 42)
)
Zastępowanie dokumentów
Za pomocą replaceOne() zastępujesz cały dokument (w przeciwieństwie do aktualizacji nie może zawierać operatorów aktualizacji):
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
kolekcja.replaceOne(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
.set("cena", 150)
.set("kategoria", "polecane")
)
Aby atomowo znaleźć i zastąpić dokument, zwracając stary dokument, użyj findOneAndReplace():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
const stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
val stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
def stary = kolekcja.findOneAndReplace(
_mongo.filters().eq("nazwa", "Laptop"),
_val.map()
.set("nazwa", "Laptop")
.set("ilosc", 50)
)
Usuwanie dokumentów
Za pomocą deleteOne() i deleteMany() usuwasz dokumenty odpowiadające filtrowi:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
kolekcja.deleteOne(
_mongo.filters().eq("nazwa", "Laptop")
)
kolekcja.deleteMany(
_mongo.filters().eq("kategoria", "nieaktywne")
)
Aby atomowo znaleźć i usunąć dokument, zwracając usunięty dokument, użyj findOneAndDelete():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
const stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
val stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
def stary = kolekcja.findOneAndDelete(
_mongo.filters().eq("nazwa", "Tablet")
)
Aby usunąć wszystkie dokumenty z kolekcji, przekaż pusty filtr za pomocą _mongo.valToDoc():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
kolekcja.deleteMany(_mongo.valToDoc(_val.map()))
Liczenie dokumentów
Za pomocą countDocuments() otrzymujesz liczbę dokumentów w kolekcji, opcjonalnie z filtrem. Z kolei estimatedDocumentCount() jest szybsze, ponieważ korzysta z metadanych kolekcji, ale bez filtra:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const suma = kolekcja.countDocuments()
const sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
const szacowana = kolekcja.estimatedDocumentCount()
const suma = kolekcja.countDocuments()
const sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
const szacowana = kolekcja.estimatedDocumentCount()
suma = kolekcja.countDocuments()
sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
szacowana = kolekcja.estimatedDocumentCount()
suma = kolekcja.countDocuments()
sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
szacowana = kolekcja.estimatedDocumentCount()
val suma = kolekcja.countDocuments()
val sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
val szacowana = kolekcja.estimatedDocumentCount()
def suma = kolekcja.countDocuments()
def sumaGlowna = kolekcja.countDocuments(
_mongo.filters().eq("kategoria", "komputery")
)
def szacowana = kolekcja.estimatedDocumentCount()
Indeksy
Za pomocą fabryki _mongo.indexes() tworzysz indeksy poprawiające wydajność zapytań. Aby utworzyć indeks, wystarczy przekazać specyfikacje do createIndex():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
kolekcja.createIndex(
_mongo.indexes().ascending("ilosc")
)
kolekcja.createIndex(
_mongo.indexes().compoundIndex(
_mongo.indexes().descending("cena"),
_mongo.indexes().ascending("ilosc")
)
)
Możesz wskazać MongoDB, którego indeksu ma użyć w zapytaniu, za pomocą hint():
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
const dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
val dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
def dokumenty = kolekcja.find().hint(
_mongo.valToDoc(
_val.map().set("ilosc", 1)
)
).all()
Za pomocą min() i max() ograniczasz zakres wartości indeksu przeglądanych przez zapytanie:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
const dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
val dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
def dokumenty = kolekcja.find()
.min(
_mongo.valToDoc(
_val.map().set("ilosc", 10)
)
)
.max(
_mongo.valToDoc(
_val.map().set("ilosc", 50)
)
)
.all()
Agregacje
Do bardziej zaawansowanych analiz służy aggregate(), który pozwala wykonać potok agregacji, gdzie każdy etap definiowany jest za pomocą fabryki _mongo.aggregates(), a akumulatory za pomocą _mongo.accumulators().
Na przykład, aby pogrupować produkty według kategorii i zsumować cenę w każdej grupie:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
const dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
val dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
def dokumenty = kolekcja.aggregate(
_mongo.aggregates().match(
_mongo.filters().eq("kategoria", "komputery")
),
_mongo.aggregates().group(
"$kategoria",
_mongo.accumulators().sum("suma", "$cena")
),
_mongo.aggregates().sort(
_mongo.sorts().descending("suma")
)
).all()
Dostępne etapy agregacji są następujące:
| Etap | Opis |
|---|---|
match(filtr) | Wybiera tylko dokumenty odpowiadające filtrowi. |
group("$pole", akumulatory) | Grupuje dokumenty według pola i stosuje akumulatory. |
project(projekcja) | Dodaje, usuwa lub zmienia pola w dokumentach. |
sort(sortowanie) | Sortuje dokumenty. |
limit(n) | Ogranicza do pierwszych n dokumentów. |
skip(n) | Pomija pierwsze n dokumentów. |
count() | Zlicza liczbę dokumentów. |
lookup("kolekcja", "poleLokalne", "poleObce", "jako") | Wykonuje złączenie z inną kolekcją. |
A najczęściej używane akumulatory:
| Akumulator | Opis |
|---|---|
sum("pole", "$wyrażenie") | Suma wartości. |
avg("pole", "$wyrażenie") | Średnia wartości. |
min("pole", "$wyrażenie") | Wartość minimalna. |
max("pole", "$wyrażenie") | Wartość maksymalna. |
first("pole", "$wyrażenie") | Wartość pierwszego dokumentu. |
last("pole", "$wyrażenie") | Wartość ostatniego dokumentu. |
top("pole", sortowanie, "$wyrażenie") | Wartość najwyższa według sortowania. |
bottom("pole", sortowanie, "$wyrażenie") | Wartość najniższa według sortowania. |
W akumulatorach wyrażenie z prefiksem
$odnosi się do pola dokumentu wejściowego, na przykład"$cena".
Konwersja między Values i BSON
Czasami zachodzi potrzeba konwersji między obiektami _val Netuno a dokumentami BSON MongoDB:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
const wartosci = _mongo.docToVal(dokument)
const dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
const wartosci = _mongo.docToVal(dokument)
dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
wartosci = _mongo.docToVal(dokument)
dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
wartosci = _mongo.docToVal(dokument)
val dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
val wartosci = _mongo.docToVal(dokument)
def dokument = _mongo.valToDoc(
_val.map().set("nazwa", "Laptop")
)
def wartosci = _mongo.docToVal(dokument)
Operacje z opcjami
Fabryki *Options() zasobu _mongo zwracają standardowe obiekty opcji sterownika MongoDB i można bezpośrednio łańcuchować ich metody. Na przykład upsert(true) wstawia dokument, gdy filtr nie odpowiada żadnemu istniejącemu dokumentowi:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
const stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
val stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
def stary = kolekcja.findOneAndUpdate(
_mongo.filters().eq("nazwa", "Monitor"),
_mongo.updates().set("ilosc", 8),
_mongo.findOneAndUpdateOptions().upsert(true)
)
Gdy dokument jest wstawiany, findOneAndUpdate() zwraca null.
Dostępne fabryki opcji to: insertOneOptions(), insertManyOptions(), updateOptions(), findOneAndUpdateOptions(), replaceOptions(), findOneAndReplaceOptions(), deleteOptions(), findOneAndDeleteOptions(), countOptions(), estimatedDocumentCountOptions(), dropCollectionOptions() i textSearchOptions().
Zamykanie połączenia
Po zakończeniu dobrą praktyką jest zamknięcie połączenia z MongoDB:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_mongo.close()
_mongo.close()
_mongo.close()
_mongo.close()
_mongo.close()
_mongo.close()
Podsumowanie
Dzięki zasobowi _mongo Netuno oferuje niskokodową i poliglotyczną abstrakcję nad oficjalnym klientem MongoDB dla Javy, umożliwiając pracę z dokumentami, filtrami, sortowaniem, projekcjami, aktualizacjami, indeksami i agregacjami w JavaScript, Python, Ruby, Kotlin i Groovy.
Aby uzyskać więcej szczegółów na temat wszystkich dostępnych metod, zapoznaj się z dokumentacją zasobu _mongo oraz klasy MongoCollection.
Udanej pracy!