Open In App

MongoDB Text Search

Last Updated : 21 Feb, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

MongoDB Text Search is a powerful feature designed to find specified text within string content in MongoDB collections. This capability is essential for applications that require efficient and effective searching capabilities. Text indexes in MongoDB should be strings or arrays of string elements and each collection can contain only one text index though this index can cover multiple fields.

In this article, We will learn about MongoDB Text Search capabilities with clear explanations and real-world examples.

What is MongoDB Text Search?

MongoDB Text Search allows searching for specific text values in documents stored within a collection. When we perform a text search query always remember that our collection must contain a text index and a collection can only contain one text index but this single text index covers multiple fields. To create a text index in MongoDB use the createIndex() method. 

  • Text indexes must be created on fields that store strings or arrays of strings.
  • A collection can have only one text index, but this index can cover multiple fields.
  • MongoDB’s text search ignores case and diacritics unless specified otherwise.

Syntax

db.collectionName.createIndex( { field: “text” } )

Using $text Operator in MongoDB

The $text operator in MongoDB is used to search the text index. This operator performs text search operations on the collection with a text index. This operator tokenizes each search string with whitespace and treats most punctuations as delimiters except - and \". After tokenizing the search string it performs a logical OR operation on the tokens. If we want to sort the resultant documents then use the $meta query operator.

Syntax:

$text:
{
     $search: <string>,
     $language: <string>,
     $caseSensitive: <boolean>,
     $diacriticSensitive: <boolean>
}

Key Terms

  • $search – The text to search for.
  • $language – (Optional) Specifies the language for tokenization.
  • $caseSensitive – (Optional) Enables case-sensitive search.
  • $diacriticSensitive – (Optional) Enables diacritic-sensitive search.

How to Perform Text Search MongoDB

MongoDB Text Search is an essential feature that allows efficient searching of text-based content within a collection. Below are the steps to perform text search in MongoDB:

Step 1: Create a Collection and Insert Documents

In the following example, we are working with:

  • Database: gfg
  • Collection: content
  • Document: The content collection contains the three documents.

First, let's create the collection and insert sample documents:

demo database and collection

Step 2: Create index

Now we create a string index on the name and pet field with the help of the createIndex() method. So we can search text over the name and line fields:

Query:

db.content.createIndex({name:"text",line:"text"})

Output:

create index

Step 3: Search Text

Now we are ready to search text. For example, we are going to search all the document which contain text love.

Query:

db.content.find({$text:{$search:"love"}})  

Note: $text is a query operator that performs text searches on a collection with a text index.

Output:

text search in mongodb

Example of MongoDB Text Search

One more example in which we are going to search all the document which contain dog text:

Query:

db.content.find({$text:{$search:"dog"}})

Output:

text search in mongodb example output

Phrase Search in MongoDB

Instead of searching a single word you are also allowed to search for a phrase by wrapping the phrase in double quotes(""). Generally, the phrase search performs OR operation in between the specified keywords.

For example, the phrase is "I like Mango", then phase search looks for all the documents that contain keywords either I, like, or Mango. And if you want to perform an exact phrase search then wrap the phase in between escaped double quotes(\").

  • MongoDB Phrase search Syntax:

db.collectionName.find({$text:{$search:"Phrase"}})

  • MongoDB Exact Phrase Search Syntax:

db.collectionName.find({$text:{$search:"\"Phrase"\"}})

Example of MongoDB Phrase Search

To understand how phrase search works in MongoDB, let's consider the following setup:

  • Database: gfg
  • Collection: content
  • Documents: The content collection contains three documents with text-based data.

In the examples below, we will perform a phrase search to find documents that contain specific phrases using MongoDB's $text operator. We'll also explore how to perform exact phrase searches by wrapping the phrase in escaped double quotes (\" \").

demo mongodb database and collection

Example 1: Find the Phrase

In this example, we search for the phrase "I love dogs". So, in the result, we get all the documents that contain keywords I, love, or dogs.

Query:

db.content.find({$text:{$search:"I love dogs"}})

Output:

find the phrase example

Example 2: Find Exact Phrase

In this example, we search for the exact phrase by wrapping the phase in between escaped double quotes(\").i.e., "\"I love dogs\"". So, in the result, we only get those documents that contain the specified exact phrase

Query:

db.content.find({$text:{$search:"\"I love dogs\""}})

Output:

find exact phrase example output

How to Exclude a Term From the Text Search?

Exclusion of term means when you perform search operation and do not want to display the document that contains the specified term, so you can exclude the term by prefixing a search keyword with the minus sign(-).

Using minus sign(-) you can exclude all the documents that contain excluded term. For example, you want to display all the documents that contain the keyword "Car" but not the "Cycle" keyword so you can use the following query:

dn.collectionName.find({$text:{$search:"Car -Cycle"}})

Example to Exclude a Term From the Text Search

To better understand how to exclude a specific term from text search in MongoDB, let's consider the following scenario:

  • Database: gfg
  • Collection: content
  • Documents: The content collection contains three documents with text-based data.

In the example below, we will perform a text search to find documents containing a specific keyword while excluding another keyword using the - (minus) operator.

demo mongodb database and collection

In this example, we only display those documents that contain dog not cow

Query:

db.content.find({$text:{$search:"dog -cow"}})

Output:

output

MongoDB Text Search In Aggregation Pipeline

We can search text using the aggregation pipeline with the help of the $text query operator in the $match stage. But there are some restrictions for using the $text operator:

  • The first stage in the pipeline must be the $match stage that contains the $text operator.
  • Only once in the stage will a text operator occur.
  • The expression of the text operator cannot appear in expressions of $or or $not.
  • By default, the text search does not return matching documents in the order of the matched scores. If you want to sort in descending score, then use the $meta aggregation expression in the $sort stage.

Note: Text score is a score that is assigned to each document that holds the search term in the index field by the $text operator. The score reflects a document's importance to a given text search query.

Example of Text Search in Aggregation Pipeline

Let's consider a MongoDB database named gfg, which contains a collection called people. The people collection consists of five documents, each representing a person with various attributes such as name, age, and pet preferences.

We will use MongoDB’s aggregation pipeline to perform text search operations on this collection.

demo mongodb database and collection

Example 1

In this example, we count the number of the document in which pet value is a cat:

Query:

db.people.aggregate([{$match:{$text:{$search:"Cat"}}},
{$group:{_id:null,total:{$sum:1}}}])

Output:

example 1 output

Example 2

In this example, we count the number of the document in which pet value is a dog:

Query:

db.people.aggregate([{$match:{$text:{$search:"Dog"}}},
{$group:{_id:null,total:{$sum:1}}}])

Output:

example 2 output

Example 3

In this example, we return the Sorted result by using text score. We return the result(all the documents that contain the specified text,i.e., "Dog") in the sorted form using textScore

Query:

db.people.aggregate([{$match:{$text:{$search:"Dog"}}},
{$sort:{score:{$meta:"textScore"}}},
{$project:{_id:0,name:1}}])

Output:

example 3 output

Conclusion

MongoDB Text Search is a powerful feature that enables full-text search capabilities in NoSQL databases. By creating text indexes and using the $text operator, developers can efficiently perform word searches, phrase searches, and exclusions. Additionally, text search can be integrated into MongoDB’s aggregation pipeline for advanced data processing. Mastering these techniques can enhance search performance and improve data retrieval in applications like e-commerce, document management, and search engines


Next Article
Article Tags :

Similar Reads