Kørsel af $text-forespørgsler med fraser og negation
De lærende vil forespørge med $text ved hjælp af anførte fraser, negerede termer og udtryk med flere ord samt undersøge, hvordan MongoDB matcher dokumenter.
Kørsel af $text-forespørgsler med fraser og negation er en gratis MongoDB Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i MongoDB Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Forespørgselsoperatoren $text
Når der findes et tekstindeks, udfører du nøgleordssøgninger med $text-operatoren i et find()-filter. Værdien er et objekt med en $search-streng, der indeholder de ord eller fraser, du leder efter. MongoDB opdeler din søgestreng i tokens på samme måde som de indekserede felter og returnerer derefter dokumenter, hvor mindst ét indekseret felt indeholder et matchende token.
// Simple keyword search
db.articles.find({ $text: { $search: 'mongodb index' } });
// This returns documents that contain 'mongodb' OR 'index'
// (or their stemmed variants) in any indexed fieldSøgninger med flere ord: ELLER-logik
Som standard bruger en $text-søgning med flere ord ELLER-logik: Et dokument matcher, hvis det indeholder et eller flere af ordene. 'mongodb index' returnerer altså dokumenter, der indeholder 'mongodb' eller 'index' eller begge dele. Relevansscoren (textScore) er højere for dokumenter, der indeholder flere af søgeordene, men alle matchende dokumenter returneres uanset hvad.
// OR semantics: matches docs with 'mongodb' OR 'index'
db.articles.find(
{ $text: { $search: 'mongodb index' } },
{ score: { $meta: 'textScore' }, title: 1 }
).sort({ score: { $meta: 'textScore' } });
// Documents with BOTH words score higher and appear firstSøgning efter fraser med dobbelte anførselstegn
Hvis du vil kræve en nøjagtig frase, skal du omslutte den med escaped dobbelte anførselstegn i $search-strengen. En frasesøgning kræver, at ordene står sammen og i den rækkefølge. Dokumenter, der kun indeholder nogle af fraseordene, men ikke den nøjagtige rækkefølge, matcher ikke. Frasesøgninger er mere præcise, men kan overse relevante dokumenter med lidt anderledes formuleringer.
// Phrase search: 'database index' must appear as a phrase
db.articles.find({
$text: { $search: '"database index"' }
});
// Only matches documents where 'database' and 'index'
// appear together as a phrase, not just anywhere in the text
// Combined phrase and keyword:
db.articles.find({
$text: { $search: '"database index" mongodb' }
});Negation med minustegnet
Sæt et minustegn (-) foran et ord for at udelukke dokumenter, der indeholder ordet. Du kan ikke bruge negation alene – du skal kombinere den med mindst ét positivt søgeord. Negation er nyttig, når et nøgleord er for bredt, og du vil filtrere en bestemt uønsket betydning fra, f.eks. 'java -coffee' for at finde programmeringsartikler om Java og ikke om drikken.
// Exclude results containing 'relational'
db.articles.find({
$text: { $search: 'database -relational' }
});
// Find NoSQL content but exclude SQL mentions
db.articles.find({
$text: { $search: 'nosql document store -sql -table' }
});Kombination af fraser og negation
Du kan frit blande fraser, nøgleord og negation i én $search-streng. MongoDB behandler hvert udtryk separat: Grupper i anførselstegn er frasesøgninger, ord med et foranstillet minustegn er udelukkelser, og de resterende ord uden anførselstegn er valgfrie nøgleordsmatch. Denne kombinerbarhed lader dig udtrykke moderat kompleks søgelogik uden en dedikeret søgemaskine.
// Find articles about 'index tuning' that mention 'mongodb'
// but exclude anything about 'elasticsearch'
db.articles.find({
$text: {
$search: '"index tuning" mongodb -elasticsearch'
}
});Uafhængighed af store og små bogstaver
$text-søgninger skelner som standard ikke mellem store og små bogstaver. MongoDB konverterer alle tokens til små bogstaver både under indeksering og søgning, så 'MongoDB', 'MONGODB' og 'mongodb' matcher de samme indekserede tokens. Du behøver ikke normalisere søgeinputtet, før du kører en $text-forespørgsel.
// All three queries return the same results
db.articles.find({ $text: { $search: 'MongoDB' } });
db.articles.find({ $text: { $search: 'MONGODB' } });
db.articles.find({ $text: { $search: 'mongodb' } });Indstillingen $language
Som standard bruger $text det sprog, der er konfigureret på tekstindekset. Du kan tilsidesætte dette pr. forespørgsel med indstillingen $language. Det er nyttigt i samlinger med flersproget indhold, hvor dokumenter på forskellige sprog skal søges med den passende stopordsliste og ordbøjningsalgoritme.
// Override language for a specific search
db.articles.find({
$text: {
$search: 'base de datos',
$language: 'spanish'
}
});
// Or disable stop words and stemming entirely
db.articles.find({
$text: {
$search: 'databases',
$language: 'none' // exact token match, no stemming
}
});Indstillingen $caseSensitive
Selvom søgning, der ikke skelner mellem store og små bogstaver, er standarden, kan du aktivere tekstmatchning, der skelner mellem store og små bogstaver, med $caseSensitive: true. Det er sjældent nødvendigt, men nyttigt, når dit indhold har identifikatorer, hvor store og små bogstaver er betydningsfulde, som klassenavne eller kommandonavne. Bemærk: Tekstsøgning, der skelner mellem store og små bogstaver, er betydeligt langsommere, fordi den ikke kan bruge de indeksopslag, der allerede er konverteret til små bogstaver.
// Case-sensitive search (slower)
db.docs.find({
$text: {
$search: 'MongoDB',
$caseSensitive: true // 'mongodb' would NOT match
}
});
// Case-insensitive (default, fast)
db.docs.find({
$text: { $search: 'mongodb' } // matches MongoDB, MONGODB, mongodb
});Indstillingen $diacriticSensitive
Som standard skelner MongoDBs tekstsøgning ikke mellem diakritiske tegn: 'café' og 'cafe' behandles som det samme ord. Du kan aktivere $diacriticSensitive: true for at skelne mellem tegn med og uden accent. Det er relevant for sprog som fransk, tysk og spansk, hvor diakritiske tegn ændrer betydningen. Ligesom ved forskel på store og små bogstaver er søgning, der skelner mellem diakritiske tegn, langsommere, fordi den omgår de forudnormaliserede indeksopslag.
// Diacritic-insensitive (default)
db.articles.find({ $text: { $search: 'cafe' } });
// Matches: 'cafe', 'café', 'cáfe'
// Diacritic-sensitive
db.articles.find({
$text: {
$search: 'cafe',
$diacriticSensitive: true
}
});
// Only matches: 'cafe' (not 'café')Tekstsøgning i aggregationspipelines
Du kan bruge $text i aggregationspipelines ved at placere et $match-trin med tekstfilteret som det allerførste trin. Det lader MongoDB sende tekstsøgningen til indekset, før de efterfølgende pipeline-trin anvendes. Derefter kan du projicere textScore, gruppere resultater efter kategori eller begrænse antallet af match – alt sammen på serversiden.
db.articles.aggregate([
// MUST be the first stage to use the text index
{ $match: { $text: { $search: 'mongodb aggregation' } } },
{ $addFields: { score: { $meta: 'textScore' } } },
{ $sort: { score: -1 } },
{ $limit: 10 },
{ $project: { title: 1, score: 1, category: 1 } }
]);Optælling af resultater fra tekstsøgning
Hvis du vil tælle, hvor mange dokumenter der matcher en tekstforespørgsel, skal du bruge countDocuments() med $text-filteret eller tilføje et $count-trin til slutningen af en aggregationspipeline. Undgå at bruge count() (forældet), og vær opmærksom på, at estimatedDocumentCount() ikke kan modtage et filter – brug altid countDocuments() til filtrerede optællinger.
// Count matching documents
const total = await db.articles.countDocuments({
$text: { $search: 'mongodb tutorial' }
});
console.log('Matches:', total);
// In an aggregation pipeline
db.articles.aggregate([
{ $match: { $text: { $search: 'mongodb tutorial' } } },
{ $count: 'total' }
]);Hurtigt tjek
Test din forståelse af indstillingerne for $text-forespørgsler fra denne lektion.
Opsummering af lektionen
I denne lektion har du lært, at ord uden anførselstegn bruger ELLER-logik og matcher et hvilket som helst af søgeordene, at fraser i dobbelte anførselstegn kræver en nøjagtig ordrækkefølge, og at ord med et foranstillet minustegn udelukker dokumenter, der indeholder udtrykket. Næste gang sorterer vi resultater efter tekstens relevansscore ved hjælp af $meta.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Kørsel af $text-forespørgsler med fraser og negation” gratis?
Ja — hele teksten til “Kørsel af $text-forespørgsler med fraser og negation” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af MongoDB Academy-kurset, skal du opgradere til CoddyKit PRO. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Kørsel af $text-forespørgsler med fraser og negation”?
De lærende vil forespørge med $text ved hjælp af anførte fraser, negerede termer og udtryk med flere ord samt undersøge, hvordan MongoDB matcher dokumenter. Du øver dig i MongoDB Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på MongoDB Academy?
Der kræves ingen tidligere erfaring. MongoDB Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Kørsel af $text-forespørgsler med fraser og negation”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne MongoDB Academy-lektion?
Ja. Alle MongoDB Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Oprettelse af et tekstindeks på tekstfelter
- Kørsel af $text-forespørgsler med fraser og negation
- Sortering efter tekstscore med $meta
- Begrænsninger ved tekstindeks og hvornår Atlas Search bør bruges