What are update operators in MongoDB?

Guide til MongoDB's $and-operator

23/07/2026

Rating: 4.09 (7853 votes)

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.

How do I use $and in MongoDB?
Indholdsfortegnelse

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.

What are MongoDB Query Operators?
MongoDB Query Operators are well-organized and easy-to-understand tools for querying data in MongoDB. W3Schools provides Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, Python, Bootstrap, Java and XML.

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:

FunktionImplicit ANDEksplicit $and
Grundlæggende syntaks{ felt1: værdi1, felt2: værdi2 }{ $and: [ {felt1: værdi1}, {felt2: værdi2} ] }
LæsbarhedHøjere for simple forespørgslerMere verbøs, men klarere for komplekse betingelser
BrugsscenarieForskellige felter har hver én betingelseNå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.

Which query operators are supported by MongoDB?

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.

Which operator is used to filter data in MongoDB?

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.

Which query operators are supported by MongoDB?

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.

Go up