Ce face $min / $max (update)
$min compară valoarea dată cu valoarea curentă a câmpului și o scrie doar dacă este mai mică. $max o scrie doar dacă este mai mare. Dacă documentul nu are câmpul, acesta este creat cu valoarea dată. Ambii operatori există din MongoDB 2.6.
Sunt potriviți pentru recorduri și limite: prețul minim văzut vreodată, nota maximă a unui elev, prima și ultima vizită (merg și cu date calendaristice). Comparația este atomică, deci nu ai nevoie să citești întâi documentul.
Parametri
| Parametru | Descriere |
|---|---|
$min |
Scrie doar dacă valoarea nouă < valoarea curentă. |
$max |
Scrie doar dacă valoarea nouă > valoarea curentă. |
Ce returnează
Rezultatul obișnuit al unui update; modifiedCount: 0 dacă nicio valoare nu a fost schimbată.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
use magazin
db.produse.insertOne({ _id: 'caiet', pretMinim: 12, pretMaxim: 15, stoc: 40 })
Exemplul 1: Actualizarea intervalului de preț
10 < 12, deci pretMinim se schimbă; 14 nu e mai mare decât 15, deci pretMaxim rămâne.
db.produse.findOneAndUpdate({ _id: 'caiet' }, { $min: { pretMinim: 10 }, $max: { pretMaxim: 14 } }, { returnDocument: 'after' })
Ieșire în mongosh
{ _id: 'caiet', pretMinim: 10, pretMaxim: 15, stoc: 40 }
Exemplul 2: Nicio schimbare
Pornind de la datele inițiale, ambele valori sunt „mai proaste” decât cele salvate, așa că documentul nu este modificat.
db.produse.updateOne({ _id: 'caiet' }, { $min: { pretMinim: 13 }, $max: { pretMaxim: 15 } })
Ieșire în mongosh
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 0,
upsertedCount: 0
}
Exemplul 3: Ultima vânzare a unui produs
Câmpul nu exista, deci este creat. Cu date calendaristice, $max păstrează cea mai recentă dată, chiar dacă evenimentele vin în altă ordine.
db.produse.updateOne({ _id: 'caiet' }, { $max: { ultimaVanzare: new Date('2026-10-25T09:30:00Z') } })
Ieșire în mongosh
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
Greșeli frecvente
- Nu confunda
$min/$maxde la update cu acumulatorii$min/$maxdin$group: aceleași nume, alt rol. - Dacă tipurile diferă (număr salvat ca text
'12'), comparația folosește ordinea tipurilor BSON, nu valoarea numerică: rezultatul te poate surprinde.
Comenzi înrudite
$rename: Operatorul $rename schimbă numele unui câmp în documente, inclusiv mutarea lui dintr-un subdocument la nivelul principal.$currentDate: Operatorul $currentDate pune în câmp data și ora serverului în momentul actualizării, ca Date sau ca Timestamp.$group: Etapa $group grupează documentele după o cheie și calculează totaluri: $sum, $avg, $min, $max, $push, $addToSet.