Skip to content
Rate this page
Thanks for your feedback
Thank you! The feedback has been submitted.

Get free database assistance or contact our experts for personalized support.

$searchMeta

Use the $searchMeta aggregation stage to retrieve metadata about a search query instead of the matching documents. This is useful when your application needs information such as the total number of matching documents or facet results for building filters and navigation, without returning the search results themselves. Unlike $search, which returns matching documents, $searchMeta returns a single metadata document and must be the first stage in the aggregation pipeline.

Typical use cases include:

  • Returning the total number of documents that match a search query.
  • Generating facet counts for fields such as category, brand, or tags.
  • Retrieving search metadata to support pagination and search-driven user interfaces.
db.<collection>.aggregate([
  {
    $searchMeta: {
      index: "<index-name>",
      <operator>: {
        <operator-specification>
      },
      count: {
        type: "<total-or-lowerBound>"
      },
      facet: {
        operator: { <operator-specification> },
        facets: { <facet-name>: { <facet-specification> } }
      }
    }
  }
])

$searchMeta accepts these fields:

Field Required Description
index Optional Name of the search index to query. Defaults to default.
<operator> Required One or more query operators, such as text or range, that define which documents are considered.
count Optional Returns the number of matching documents. Accepts type (total for an exact count, or lowerBound for a faster approximate count, with an optional threshold).
facet Optional Returns counts grouped by field values. Takes an operator to define the query and one or more named facets.

Count the number of matching documents

Use $searchMeta with the count option to return the total number of documents that match the search query.

Count movies matching ‘adventure’
db.movies.aggregate([
  {
    $searchMeta: {
      index: "default",
      text: {
        query: "adventure",
        path: "plot"
      },
      count: {
        type: "total"
      }
    }
  }
])

Output:

[
  {
    count: { total: Long('128') }
  }
]

Learn more