Kjøre $text-spørringer med fraser og negasjon
Deltakerne vil spørre med $text ved hjelp av anførte fraser, negerte termer og uttrykk med flere ord, og undersøke hvordan MongoDB finner samsvarende dokumenter.
Kjøre $text-spørringer med fraser og negasjon er en gratis leksjon i MongoDB Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i MongoDB Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i MongoDB Academy inneholder totalt 4 leksjoner.
Spørringsoperatoren $text
Når en tekstindeks finnes, kjører De nøkkelordsøk med $text-operatoren i et find()-filter. Verdien er et objekt med en $search-streng som inneholder ordene eller frasene De leter etter. MongoDB tokeniserer søkestrengen på samme måte som de indekserte feltene ble tokenisert, og returnerer deretter dokumenter der minst ett indeksert felt inneholder et samsvarende 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øk med flere ord: OR-semantikk
Som standard bruker et $text-søk med flere ord OR-semantikk: et dokument samsvarer hvis det inneholder minst ett av ordene. 'mongodb index' returnerer derfor dokumenter som inneholder 'mongodb', 'index' eller begge. Relevanspoengsummen (textScore) er høyere for dokumenter som inneholder flere av søkeordene, men alle samsvarende dokumenter returneres uansett.
// 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 firstFrasesøk med doble anførselstegn
For å kreve en eksakt frase omslutter De den med escaped doble anførselstegn i $search-strengen. Et frasesøk krever at ordene står sammen og i riktig rekkefølge. Dokumenter som bare inneholder noen av fraseordene, men ikke den nøyaktige sekvensen, samsvarer ikke. Frasesøk er mer presise, men kan gå glipp av relevante dokumenter med litt annerledes formulering.
// 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' }
});Negasjon med minustegnet
Sett et minustegn (-) foran et ord for å utelate dokumenter som inneholder ordet. De kan ikke bruke negasjon alene – den må kombineres med minst ett positivt søkeord. Negasjon er nyttig når et nøkkelord er for bredt, og De vil filtrere bort en bestemt uønsket betydning, for eksempel 'java -coffee' for å finne programmeringsartikler om Java, 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' }
});Kombinere fraser og negasjon
De kan fritt blande fraser, nøkkelord og negasjon i én $search-streng. MongoDB behandler hvert uttrykk separat: grupper i anførselstegn er frasesøk, ord med minustegn foran er utelukkelser, og de øvrige ord uten omsluttende tegn er valgfrie nøkkelordsøk. Denne kombinerbarheten gjør det mulig å uttrykke moderat kompleks søkelogikk uten en dedikert søkemotor.
// Find articles about 'index tuning' that mention 'mongodb'
// but exclude anything about 'elasticsearch'
db.articles.find({
$text: {
$search: '"index tuning" mongodb -elasticsearch'
}
});Uavhengig av store og små bokstaver
$text-søk er som standard uavhengige av store og små bokstaver. MongoDB gjør alle tokenene om til små bokstaver både under indeksering og søk, slik at 'MongoDB', 'MONGODB' og 'mongodb' samsvarer med de samme indekserte tokenene. De trenger ikke å normalisere søkeinndata før De kjører en $text-spørring.
// 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' } });Alternativet $language
Som standard bruker $text språket som er konfigurert på tekstindeksen. De kan overstyre dette for hver spørring med $language-alternativet. Dette er nyttig for samlinger med flerspråklig innhold, der dokumenter på forskjellige språk bør søkes med riktig liste over stoppord og riktig stemmingalgoritme.
// 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
}
});Alternativet $caseSensitive
Selv om søk som ikke skiller mellom store og små bokstaver er standardinnstillingen, kan De aktivere tekstsøk som skiller mellom store og små bokstaver med $caseSensitive: true. Dette er sjelden nødvendig, men nyttig når innholdet inneholder identifikatorer der store og små bokstaver har betydning, for eksempel klassenavn eller kommandonavn. Merk: tekstsøk som skiller mellom store og små bokstaver, er betydelig tregere fordi det ikke kan bruke de forhåndskonverterte indeksoppføringene.
// 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
});Alternativet $diacriticSensitive
Som standard skiller MongoDBs tekstsøk ikke mellom diakritiske tegn: 'café' og 'cafe' behandles som samme ord. De kan aktivere $diacriticSensitive: true for å skille mellom aksenttegn. Dette er viktig for språk som fransk, tysk og spansk, der diakritiske tegn kan endre betydningen. I likhet med søk som skiller mellom store og små bokstaver, er diakritikksensitivt søk tregere fordi det hopper over forhåndsnormaliserte indeksoppføringer.
// 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øk i aggregasjonsrørledninger
De kan bruke $text i aggregasjonsrørledninger ved å plassere et $match-trinn med tekstfilteret som aller første trinn. Da kan MongoDB sende tekstsøket til indeksen før de påfølgende rørledningstrinnene brukes. Deretter kan De projisere textScore, gruppere resultater etter kategori eller begrense antallet treff – alt 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 } }
]);Telle resultater fra tekstsøk
For å telle hvor mange dokumenter som samsvarer med en tekstspørring, bruker De countDocuments() med $text-filteret eller legger til et $count-trinn på slutten av en aggregasjonsrørledning. Unngå å bruke count() (utdatert), og vær oppmerksom på at estimatedDocumentCount() ikke kan ta imot et filter – bruk alltid countDocuments() for filtrerte opptellinger.
// 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' }
]);Rask kontroll
Test forståelsen Deres av alternativene for $text-spørringer fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte De at ord uten omsluttende tegn bruker OR-semantikk og samsvarer med hvilket som helst av søkeordene, at fraser i doble anførselstegn krever en nøyaktig ordsekvens, og at ord med minustegn foran utelukker dokumenter som inneholder uttrykket. Neste gang sorterer vi resultater etter tekstens relevanspoengsum ved hjelp av $meta.
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Kjøre $text-spørringer med fraser og negasjon» gratis?
Ja – hele teksten i «Kjøre $text-spørringer med fraser og negasjon» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av MongoDB Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i MongoDB Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Kjøre $text-spørringer med fraser og negasjon»?
Deltakerne vil spørre med $text ved hjelp av anførte fraser, negerte termer og uttrykk med flere ord, og undersøke hvordan MongoDB finner samsvarende dokumenter. Du øver på MongoDB Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med MongoDB Academy?
Ingen tidligere erfaring er nødvendig. MongoDB Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Kjøre $text-spørringer med fraser og negasjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne MongoDB Academy-leksjonen?
Ja. Alle MongoDB Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Opprette en tekstindeks på tekstfelt
- Kjøre $text-spørringer med fraser og negasjon
- Sortere etter tekstscore med $meta
- Begrensninger ved tekstindekser og når Atlas Search bør brukes