distinct() în MongoDB & NoSQL

Întoarce valorile unice ale unui câmp din colecție, opțional doar pentru documentele care se potrivesc unui filtru.

Sintaxă
db.colectie.distinct(camp, filtru, optiuni)

Ce face distinct()

distinct('oras') parcurge documentele și întoarce o listă cu fiecare valoare a câmpului o singură dată. Dacă câmpul este un tablou, fiecare element al tabloului contează ca valoare separată.

Al doilea argument este un filtru, ca la find(). Rezultatul este un tablou obișnuit, deci poți folosi .length ca să afli câte valori distincte există. Pentru numărare pe valori (câte comenzi are fiecare oraș), folosește $group sau $sortByCount.

Parametri

Parametru Descriere
camp Numele câmpului (acceptă și câmpuri imbricate: 'adresa.oras').
filtru Opțional: doar documentele care se potrivesc.
optiuni Opțional, de exemplu { collation: { locale: 'ro' } }.

Ce returnează

Un tablou cu valorile distincte.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

use magazin
db.comenzi.insertMany([
  { _id: 1, client: 'Ana', oras: 'Iași', total: 120, status: 'livrata', produse: ['caiet', 'pix'] },
  { _id: 2, client: 'Dan', oras: 'Cluj', total: 85, status: 'noua', produse: ['carte'] },
  { _id: 3, client: 'Ioana', oras: 'Iași', total: 240, status: 'livrata', produse: ['rucsac', 'caiet', 'pix'] },
  { _id: 4, client: 'Mihai', oras: 'Brașov', total: 60, status: 'anulata', produse: [] }
])

Exemplul 1: Orașele din care avem comenzi

Fiecare oraș apare o dată, chiar dacă Iași are două comenzi.

db.comenzi.distinct('oras')

Ieșire în mongosh

[ 'Brașov', 'Cluj', 'Iași' ]

Exemplul 2: Produsele din comenzile livrate

Câmpul produse este tablou, așa că fiecare element contează separat.

db.comenzi.distinct('produse', { status: 'livrata' })

Ieșire în mongosh

[ 'caiet', 'pix', 'rucsac' ]

Exemplul 3: Câte orașe distincte

Rezultatul este un tablou JavaScript, deci are .length.

db.comenzi.distinct('oras').length

Ieșire în mongosh

3

Greșeli frecvente

  • Rezultatul distinct trebuie să încapă într-un singur document BSON (16 MB). Pentru câmpuri cu foarte multe valori, folosește aggregate cu $group.
  • 'Iasi' și 'Iași' sunt valori diferite. Curăță datele sau folosește o colație dacă vrei să le tratezi la fel.

Comenzi înrudite

  • $group: Etapa $group grupează documentele după o cheie și calculează totaluri: $sum, $avg, $min, $max, $push, $addToSet.
  • find() cu proiecție: Al doilea argument al lui find() alege ce câmpuri întoarce interogarea: 1 = include, 0 = exclude.
  • $count / $sortByCount: Etapa $count numără documentele ajunse în acel punct al pipeline-ului; $sortByCount numără pe valori și ordonează descrescător.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: distinct()

Ai o nelămurire despre utilizarea comenzii distinct() sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.