Choose an Aggregation Pipeline Stage
On this page
Looking for $searchBeta
? Use $search
instead, the official
aggregation stage for running search queries.
Atlas Search queries take the form of an aggregation pipeline stage. This page describes the following pipeline stages:
$search
Definition
The $search
stage performs a full-text search on the
specified field or fields which must be covered by an Atlas Search index.
$search
A
$search
pipeline stage has the following prototype form:{ $search: { "index": "<index-name>", "<operator-name>"|"<collector-name>": { <operator-specification>|<collector-specification> }, "highlight": { <highlight-options> }, "count": { <count-options> }, "returnStoredSource": true | false } }
Fields
The $search
stage takes a document with the following fields:
Field | Type | Necessity | Description |
---|---|---|---|
<collector-name> | document | Conditional | Name of the collector to use with the
query. You can provide a document that contains the
collector-specific options as the value for this field. Either
this or <operator-name> is required. |
count | document | Optional | Document that specifies the count options for
retrieving a count of the results. To learn more, see
Count Search Results. |
highlight | document | Optional | Document that specifies the Highlight Search Terms in Results options for
displaying search terms in their original context. |
index | string | Optional | Name of the Atlas Search index to use. If omitted, defaults to
Note If you name your index |
<operator-name> | document | Conditional | Name of the operator to search with. You
can provide a document that contains the operator-specific
options as the value for this field. Either this or
<collector-name> is required. |
returnStoredSource | boolean | Optional | Note The Atlas Search index storedSource
option and Flag that specifies whether to perform a full document lookup
on the backend database or return only stored source fields
directly from Atlas Search. If omitted, defaults to |
Behavior
$search
must be the first stage of any pipeline it appears
in. $search
cannot be used in:
- a view definition
- a
$lookup subpipeline
- a
$facet
pipeline stage
Aggregation Variable
Atlas Search facet and count are in preview, but can be used in production applications. If there are any syntax or behavior changes between the preview stage and general availability (GA), we will proactively communicate before introducing any breaking changes. The MongoDB Cloud Support team will help troubleshoot any issues related to using this feature as part of your contract.
$search
returns only the results of your query. The
metadata results of your $search
query are saved in the
$$SEARCH_META
aggregation variable. You can use the
$$SEARCH_META
variable to view the metadata results for your
$search
query.
Suppose the following index on the sample_mflix.movies
collection.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
The following query searches for movies released near September
01, 2011 using the $search
stage. The query includes
a:
$project
stage to exclude all fields in the documents excepttitle
andreleased
.$facet
stage that outputs a:docs
field with an array of the top5
search resultsmeta
field with the value of$$SEARCH_META
variable
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } } }, { $project: { "_id": 0, "title": 1, "released": 1 } }, { "$facet": { "docs": [ {"$limit": 5} ], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
The query returns the following results:
{ "docs" : [ { "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Bag It", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Dos", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "We Were Here", "released" : ISODate("2011-09-01T00:00:00Z") } ], "meta" : [ { "count" : { "lowerBound" : NumberLong(17373) } } ] }
To learn more about the $$SEARCH_META
variable and its usage,
see:
$searchMeta
Atlas Search facet and count are in preview, but can be used in production applications. If there are any syntax or behavior changes between the preview stage and general availability (GA), we will proactively communicate before introducing any breaking changes. The MongoDB Cloud Support team will help troubleshoot any issues related to using this feature as part of your contract.
Definition
The $searchMeta
stage returns different types of
metadata result documents.
Fields
The $searchMeta
stage takes a document with the following fields:
Field | Type | Necessity | Description |
---|---|---|---|
<collector-name> | document | Conditional | Name of the collector to use with the
query. You can provide a document that contains the
collector-specific options as the value for this field. Value
must be facet to retrieve a mapping of the defined facet
names to an array of buckets for that facet. To learn more, see
facet. You must specify this or
<operator-name> . |
count | document | Optional | Document that specifies the count options for
retrieving a count of the results. To learn more, see
Count Search Results. |
index | string | Optional | Name of the Atlas Search index to use. If omitted, defaults to
default . |
<operator-name> | document | Conditional | Name of the operator to search with. You
can provide a document that contains the operator-specific
options as the value for this field. You must specify
this or <collector-name> . $searchMeta
returns the default count metadata only. |
Metadata Result Types
The structure of the metadata results document that is returned by
the $searchMeta
stage varies based on the type of
results. Atlas Search supports the following result types:
Type | Result Structure |
---|---|
count | The count result included in the results indicate whether the
count returned in the results is a total count of the search
results, or a lower bound. To learn more, see
Count Results. |
facet | The result to a facet query is a mapping of the defined facet
names to an array of buckets for that facet. To learn more,
see Facet Results. |
Troubleshoot Errors
Initial Sync
Atlas Search can't perform $search
queries against an Atlas cluster during
an initial sync process. An initial sync process occurs when you create a new
cluster or perform certain upgrades on a cluster. The process includes the
following steps:
- The
mongod
performs an initial sync. - The
mongot
performs an initial sync, which rebuilds the search indexes.
As a result, you may receive an error when running a $search
query against a
node that you recently created or upgraded. Try your query again
after the initial syncs complete and mongot
rebuilds the indexes. You can
check the status of the mongot
initial sync using the following steps:
- Click the Search tab for your database deployment.
- In the index's
Status
column, click View Status Details. - Check the state of the index for the node. During
mongot
initial sync, the status isINITIAL SYNC
. Whenmongot
finishes rebuilding the index, the status isACTIVE
.
mongot
Process Not Installed or Running
The following error is returned if you run $search
queries when
the Atlas Search mongot
process isn't installed or running:
MongoError: Remote error from mongot :: caused by :: Error connecting to localhost:28000.
The mongot
process is installed only when the first Atlas Search index is
defined. If you don't have any Atlas Search index in your Atlas cluster,
create at least one Atlas Search index to resolve this error.