23/07/2026
I en verden af databaser er evnen til at filtrere og finde specifik information afgørende. Uanset om du arbejder med patientjournaler, produktkataloger eller finansielle data, er præcise forespørgsler nøglen til effektiv datahåndtering. MongoDB, en populær NoSQL-database, tilbyder en række kraftfulde værktøjer til dette formål, og en af de mest fundamentale er den logiske $and-operator. Denne artikel vil dykke ned i, hvordan du bruger $and til at udføre komplekse søgninger, der kræver, at flere betingelser er opfyldt samtidigt.

Hvad er den logiske $and-operator?
I sin kerne er $and en logisk forespørgselsoperator, der giver dig mulighed for at udføre en logisk AND-operation på en række af et eller flere udtryk. Den returnerer kun de dokumenter, hvor alle de angivne udtryk er sande. Hvis bare ét udtryk evalueres til falsk, vil dokumentet ikke blive inkluderet i resultatet.
Syntaksen for $and er som følger:
{ $and: [{udtryk1}, {udtryk2}, ...] }
En vigtig funktion ved $and er dens "short-circuit evaluation". Det betyder, at MongoDB stopper med at evaluere de resterende udtryk, så snart den finder et udtryk, der er falsk. Dette kan forbedre ydeevnen i forespørgsler med mange betingelser, da databasen ikke spilder ressourcer på unødvendige checks.

Eksplicit $and vs. Implicit AND
MongoDB gør det ofte nemt for udviklere ved at tilbyde en mere kompakt måde at udføre AND-operationer på. Når du angiver en kommasepareret liste af udtryk i din forespørgsel, udfører MongoDB en implicit AND-operation. For eksempel, en forespørgsel som { team: 'Spurs', points: { $gte: 22 } } finder dokumenter, hvor 'team' er 'Spurs' OG 'points' er større end eller lig med 22.
Så hvornår skal man bruge den eksplicitte $and-operator? Den er især nødvendig i situationer, hvor du har brug for at anvende flere operatorer på det samme felt. For eksempel, hvis du vil finde produkter, hvor prisen er større end 500 OG mindre end 900. En implicit AND ville ikke fungere her, da du ikke kan have den samme nøgle ('price') to gange i et JSON-objekt.
Her er en tabel, der sammenligner de to tilgange:
| Funktion | Implicit AND | Eksplicit $and |
|---|---|---|
| Grundlæggende syntaks | { felt1: værdi1, felt2: værdi2 } | { $and: [ {felt1: værdi1}, {felt2: værdi2} ] } |
| Læsbarhed | Højere for simple forespørgsler | Mere verbøs, men klarere for komplekse betingelser |
| Brugsscenarie | Forskellige felter har hver én betingelse | Når det samme felt har flere betingelser (f.eks. et interval) |
Praktiske eksempler med $and
Lad os antage, at vi har en 'products'-samling med følgende dokumenter:
db.products.insertMany([ { "_id": 1, "name": "xPhone", "price": 799, "color": ["white", "black"] }, { "_id": 2, "name": "xTablet", "price": 899, "color": ["white", "black", "purple"] }, { "_id": 3, "name": "SmartTablet", "price": 899, "color": ["blue"] }, { "_id": 4, "name": "SmartPad", "price": 699, "color": ["white", "orange", "gold"] } ])Eksempel 1: Find produkter med specifik pris og farve
Vi vil finde alle produkter, hvor prisen er præcis 899, OG farven enten er 'white' eller 'black'. Her kombinerer vi en eksakt match på pris med en $in-operator på farvefeltet.

Forespørgslen ser således ud:
db.products.find({ $and: [ { price: 899 }, { color: { $in: ["white", "black"] } } ] })Dette vil returnere 'xTablet'-dokumentet, da det er det eneste, der opfylder begge betingelser: prisen er 899, og dets 'color'-array indeholder enten 'white' eller 'black'.
Eksempel 2: Brug af $and med samme felt
Selvom dette eksempel kan løses med en implicit AND, illustrerer det, hvordan man kan strukturere en forespørgsel med flere checks på samme felt. Lad os finde produkter, hvor prisen er 699 OG prisfeltet eksisterer. Dette kan være nyttigt for at sikre, at feltet ikke er null eller mangler.
db.products.find({ $and: [ { price: 699 }, { price: { $exists: true } } ] })Dette returnerer 'SmartPad'-dokumentet. Bemærk, at dette specifikke tilfælde kunne skrives mere kompakt som db.products.find({ price: { $eq: 699, $exists: true } }), hvilket er et godt eksempel på den implicitte AND-operator i aktion for det samme felt.

Avanceret forespørgsel med tre betingelser
Lad os bruge en anden samling, 'teams', for at illustrere en forespørgsel med mere end to betingelser.
db.teams.insertMany([ { team: "Mavs", points: 30, rebounds: 8 }, { team: "Mavs", points: 30, rebounds: 12 }, { team: "Spurs", points: 20, rebounds: 7 }, { team: "Spurs", points: 25, rebounds: 5 }, { team: "Spurs", points: 23, rebounds: 9 } ])Vi ønsker at finde alle dokumenter, hvor:
- 'team' ikke er 'Mavs' (bruger
$ne- not equal) - 'points' er større end eller lig med 22 (bruger
$gte- greater than or equal) - 'rebounds' er mindre end 7 (bruger
$lt- less than)
Forespørgslen konstrueres med $and for at sikre, at alle tre regler gælder:
db.teams.find({ $and: [ { "team": { $ne: "Mavs" } }, { "points": { $gte: 22 } }, { "rebounds": { $lt: 7 } } ] })Resultatet er kun ét dokument:
{ _id: ..., team: 'Spurs', points: 25, rebounds: 5 }
Dette dokument er det eneste, der opfylder alle tre krav: holdet er ikke 'Mavs', point er over 22, og rebounds er under 7. Dette viser kraften i at kombinere flere operatorer for at opnå en meget specifik og præcis filtrering.
Ofte Stillede Spørgsmål (FAQ)
Hvornår skal jeg bruge eksplicit $and i stedet for implicit AND?
Du skal bruge den eksplicitte $and-operator, når du har brug for at anvende flere betingelser på det samme felt. For eksempel, for at finde dokumenter hvor { 'pris': { $gt: 50, $lt: 100 } }, ville en implicit forespørgsel ikke virke korrekt i alle sammenhænge, mens { $and: [ { 'pris': { $gt: 50 } }, { 'pris': { $lt: 100 } } ] } altid vil fungere som forventet.

Kan $and-operatoren påvirke ydeevnen?
Ja, ligesom enhver anden forespørgsel, kan kompleksiteten af dine $and-betingelser påvirke ydeevnen. For at sikre hurtige svar er det afgørende at have indekser på de felter, du ofte søger på. MongoDB kan bruge disse indekser til hurtigt at indsnævre søgningen, selv med flere AND-betingelser.
Hvad er forskellen mellem $and og $or?
De er logiske modsætninger. Mens $and kræver, at alle betingelser er sande for et dokument, kræver $or-operatoren kun, at mindst én af betingelserne er sand. De kan endda kombineres for at skabe meget sofistikerede logiske forespørgsler.
Hvis du vil læse andre artikler, der ligner Guide til MongoDB's $and-operator, kan du besøge kategorien Sundhed.
