$text-query's uitvoeren met woordgroepen en ontkenning
U voert query's uit met $text, met aanhalingstekens om woordgroepen, ontkende termen en uitdrukkingen met meerdere woorden, en onderzoekt hoe MongoDB documenten overeen laat komen.
$text-query's uitvoeren met woordgroepen en ontkenning is een gratis MongoDB Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject MongoDB Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus MongoDB Academy bevat in totaal 4 lessen.
De $text-queryoperator
Zodra er een tekstindex bestaat, voer je zoekopdrachten op trefwoorden uit met de $text-operator in een find()-filter. De waarde is een object met een $search-tekenreeks die de woorden of woordgroepen bevat waarnaar je zoekt. MongoDB splitst je zoektekenreeks op dezelfde manier in tokens als de geïndexeerde velden en retourneert vervolgens documenten waarin ten minste één geïndexeerd veld een overeenkomend token bevat.
// 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 fieldZoeken naar meerdere woorden: OF-semantiek
Standaard gebruikt een $text-zoekopdracht met meerdere woorden OF-semantiek: een document komt overeen als het een van de woorden bevat. Zo retourneert 'mongodb index' documenten die 'mongodb', 'index' of beide bevatten. De relevantiescore (textScore) is hoger voor documenten die meer zoektermen bevatten, maar alle overeenkomende documenten worden geretourneerd.
// 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 firstZoeken naar woordgroepen met dubbele aanhalingstekens
Als je een exacte woordgroep wilt vereisen, zet je die tussen escaped dubbele aanhalingstekens binnen de tekenreeks van $search. Bij zoeken naar een woordgroep moeten de woorden samen en in die volgorde voorkomen. Documenten die slechts enkele woorden uit de woordgroep bevatten, maar niet de exacte reeks, komen niet overeen. Zoeken naar woordgroepen is nauwkeuriger, maar kan relevante documenten met een iets andere formulering missen.
// 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' }
});Negatie met het minteken
Zet een minteken (-) voor een woord om documenten die dat woord bevatten uit te sluiten. Je kunt negatie niet op zichzelf gebruiken: je moet die combineren met ten minste één positieve zoekterm. Negatie is nuttig wanneer een trefwoord te algemeen is en je een specifieke ongewenste betekenis wilt uitsluiten, zoals bij 'java -coffee' om programmeerartikelen over Java te vinden en niet over de drank.
// 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' }
});Woordgroepen en negatie combineren
Je kunt woordgroepen, trefwoorden en negatie vrij combineren in één tekenreeks van $search. MongoDB verwerkt elke term afzonderlijk: groepen tussen aanhalingstekens zijn zoekopdrachten naar woordgroepen, woorden met een voorafgaand minteken zijn uitsluitingen en de overige losse woorden zijn optionele overeenkomsten met trefwoorden. Dankzij deze combineerbaarheid kun je redelijk complexe zoeklogica uitdrukken zonder een speciale zoekmachine.
// Find articles about 'index tuning' that mention 'mongodb'
// but exclude anything about 'elasticsearch'
db.articles.find({
$text: {
$search: '"index tuning" mongodb -elasticsearch'
}
});Hoofdletterongevoeligheid
$text-zoekopdrachten zijn standaard hoofdletterongevoelig. MongoDB zet alle tokens tijdens het indexeren en zoeken om naar kleine letters, zodat 'MongoDB', 'MONGODB' en 'mongodb' met dezelfde geïndexeerde tokens overeenkomen. Je hoeft de zoekinvoer niet te normaliseren voordat je een $text-query uitvoert.
// 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' } });De optie $language
Standaard gebruikt $text de taal die op de tekstindex is geconfigureerd. Je kunt dit per query overschrijven met de optie $language. Dit is nuttig voor verzamelingen met meertalige inhoud, waarin documenten in verschillende talen zijn opgeslagen en moeten worden doorzocht met de juiste lijst met stopwoorden en het juiste algoritme voor stamvorming.
// 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
}
});De optie $caseSensitive
Hoewel hoofdletterongevoelig zoeken de standaard is, kun je hoofdlettergevoelig zoeken in tekst inschakelen met $caseSensitive: true. Dit is zelden nodig, maar nuttig wanneer je inhoud hoofdlettergevoelige identifiers bevat, zoals klassennamen of opdrachtnamen. Let op: hoofdlettergevoelig zoeken in tekst is aanzienlijk trager, omdat de vooraf naar kleine letters omgezette indexitems niet kunnen worden gebruikt.
// 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
});De optie $diacriticSensitive
Standaard is zoeken in MongoDB-tekst ongevoelig voor diakritische tekens: 'café' en 'cafe' worden als hetzelfde woord behandeld. Je kunt $diacriticSensitive: true inschakelen om tekens met accenten van elkaar te onderscheiden. Dit is belangrijk voor talen zoals Frans, Duits en Spaans, waarin diakritische tekens de betekenis veranderen. Net als hoofdlettergevoelig zoeken is zoeken dat gevoelig is voor diakritische tekens trager, omdat vooraf genormaliseerde indexitems worden omzeild.
// 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é')Zoeken in tekst binnen aggregatiepijplijnen
Je kunt $text in aggregatiepijplijnen gebruiken door een $match-fase met het tekstfilter als de allereerste fase te plaatsen. Hierdoor kan MongoDB de tekstzoekopdracht naar de index doorschuiven voordat volgende pijplijnfasen worden toegepast. Vervolgens kun je de textScore projecteren, resultaten per categorie groeperen of het aantal overeenkomsten beperken, allemaal aan de serverkant.
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 } }
]);Resultaten van tekstzoekopdrachten tellen
Gebruik countDocuments() met het $text-filter of voeg aan het einde van een aggregatiepijplijn een $count-fase toe om te tellen hoeveel documenten met een tekstquery overeenkomen. Gebruik count() niet (afgeschaft) en houd er rekening mee dat estimatedDocumentCount() geen filter accepteert. Gebruik voor tellingen met een filter altijd countDocuments().
// 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' }
]);Snelle controle
Test je begrip van de opties voor $text-query's uit deze les.
Samenvatting van de les
In deze les heb je geleerd dat losse woorden OF-semantiek gebruiken en met een van de zoektermen overeenkomen, dat woordgroepen tussen dubbele aanhalingstekens een exacte woordenreeks vereisen en dat woorden met een voorafgaand minteken documenten uitsluiten die die term bevatten. Hierna sorteren we resultaten op relevantiescore met $meta.
Leer JavaScript met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “$text-query's uitvoeren met woordgroepen en ontkenning” gratis?
Ja — de volledige tekst van “$text-query's uitvoeren met woordgroepen en ontkenning” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus MongoDB Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus MongoDB Academy bevat in totaal 4 lessen.
Wat leer ik in “$text-query's uitvoeren met woordgroepen en ontkenning”?
U voert query's uit met $text, met aanhalingstekens om woordgroepen, ontkende termen en uitdrukkingen met meerdere woorden, en onderzoekt hoe MongoDB documenten overeen laat komen. Je oefent met MongoDB Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met MongoDB Academy te beginnen?
Ervaring vooraf is niet nodig. MongoDB Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “$text-query's uitvoeren met woordgroepen en ontkenning”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over MongoDB Academy?
Ja. Elke les over MongoDB Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Een text-index op tekenreeksvelden maken
- $text-query's uitvoeren met woordgroepen en ontkenning
- Sorteren op text score met $meta
- Beperkingen van text-indexen en wanneer u Atlas Search gebruikt