How to Run Atlas Search Queries Against Objects in Arrays
On this page
- Overview
- About the Sample Collection
- About the Atlas Search Index
- About the Queries
- Try it in the Atlas Search Playground
- Access the Atlas Search Playground.
- Review the Data Source, Index, and Query panes.
- Click Run or press
Command
+Enter
to run the query. - Access the Atlas Search Playground.
- Review the Data Source, Index, and Query panes.
- Click Run or press
Command
+Enter
to run the query. - Access the Atlas Search Playground.
- Review the Data Source, Index, and Query panes.
- Click Run or press
Command
+Enter
to run the query. - Try it on Your Atlas Cluster
- Create a Sample Collection and Load the Data
- Create an Atlas Search Index
- Run
$search
Queries Against Embedded Document Fields - Run
$searchMeta
Query Against Embedded Document Fields
Overview
This tutorial describes how to index and run Atlas Search queries against
fields in documents, or objects, that are inside an array
(embeddedDocuments
). The page contains instructions for running
sample queries using a
sample index for a
sample collection
that we have set up for you in the Atlas Search Playground or that you can load,
configure, and run on your Atlas cluster.
About the Sample Collection
The sample collection is named schools
and it contains three
documents. Each document in the sample collection contains the name
and mascot
of the school, school teachers' first
and last
names, the classes
that each teacher teaches including the
subject
name and grade
level, and the various clubs
for the
school students.
About the Atlas Search Index
The index definition for the collection shows the following:
Documents in the arrays at the
teachers
andteachers.classes
paths are indexed as embeddedDocuments, and the fields inside the documents are dynamically indexed.Documents in the arrays at the
teachers
path are also indexed as the document type to support highlighting, and the fields inside the documents are dynamically indexed.Document in the
clubs
field is indexed as the document type with dynamic mappings enabled and the arrays of documents in theclubs.sports
field are indexed as theembeddedDocuments
type with dynamic mappings enabled.
About the Queries
The sample queries search the embedded documents in the schools
collection. The queries use the following pipeline stages:
$search
to search the collection.$project
to include and exclude fields from the collection, and add a field namedscore
in the results. For queries that enable highlighting, the$project
stage also adds a new field calledhighlights
, which contains the highlighting information.
The tutorial demonstrates three different queries.
Try it in the Atlas Search Playground
On the Atlas Search Playground, we have set up an embedded documents collection, pre-configured an index for the fields in the collection, and defined a query that you can run against the collection. You can also modify the collection, index, and query in the Atlas Search Playground.
Try it on Your Atlas Cluster
To demonstrate how to run queries against embedded documents, this section walks you through the following steps:
Create a sample collection named
schools
with embedded documents in your Atlas cluster.Set up an Atlas Search index with embeddedDocuments fields configured at the following paths:
teachers
fieldteachers.classes
fieldclubs.sports
field
Run
$search
queries that search the embedded documents in theschools
collection using the compound operator with the embeddedDocument and text operators.Run a
$searchMeta
query against an embedded document field to get a count.
Before you begin, ensure that your Atlas cluster meets the requirements described in the Prerequisites. For this tutorial, you don't need to upload the sample data because you will create a new collection and load the documents that you need to run the queries in this tutorial.
Create a Sample Collection and Load the Data
You must begin by creating a collection named schools
in an
existing or new database on your Atlas cluster. After creating the
collection, you must upload the sample data into your collection. To
learn more about the documents in the sample collection, see
About the Sample Collection.
The steps in this section walk you through creating a new database and collection, and loading the sample data into your collection.
In Atlas, go to the Clusters page for your project.
If it is not already displayed, select the organization that contains your desired project from the Organizations menu in the navigation bar.
If it is not already displayed, select your desired project from the Projects menu in the navigation bar.
If the Clusters page is not already displayed, click Database in the sidebar.
Load the following documents into the collection.
Select the
schools
collection if it's not selected.Click Insert Document for each of the sample documents to add to the collection.
Click the JSON view ({}) to replace the default document.
Copy and paste the following sample documents, one at a time, and click Insert to add the documents, one at a time, to the collection.
{ "_id": 0, "name": "Springfield High", "mascot": "Pumas", "teachers": [{ "first": "Jane", "last": "Smith", "classes": [{ "subject": "art of science", "grade": "12th" }, { "subject": "applied science and practical science", "grade": "9th" }, { "subject": "remedial math", "grade": "12th" }, { "subject": "science", "grade": "10th" }] }, { "first": "Bob", "last": "Green", "classes": [{ "subject": "science of art", "grade": "11th" }, { "subject": "art art art", "grade": "10th" }] }], "clubs": { "stem": [ { "club_name": "chess", "description": "provides students opportunity to play the board game of chess informally and competitively in tournaments." }, { "club_name": "kaboom chemistry", "description": "provides students opportunity to experiment with chemistry that fizzes and explodes." } ], "arts": [ { "club_name": "anime", "description": "provides students an opportunity to discuss, show, and collaborate on anime and broaden their Japanese cultural understanding." }, { "club_name": "visual arts", "description": "provides students an opportunity to train, experiment, and prepare for internships and jobs as photographers, illustrators, graphic designers, and more." } ] } } { "_id": 1, "name": "Evergreen High", "mascot": "Jaguars", "teachers": [{ "first": "Jane", "last": "Earwhacker", "classes": [{ "subject": "art", "grade": "9th" }, { "subject": "science", "grade": "12th" }] }, { "first": "John", "last": "Smith", "classes": [{ "subject": "math", "grade": "12th" }, { "subject": "art", "grade": "10th" }] }], "clubs": { "sports": [ { "club_name": "archery", "description": "provides students an opportunity to practice and hone the skill of using a bow to shoot arrows in a fun and safe environment." }, { "club_name": "ultimate frisbee", "description": "provides students an opportunity to play frisbee and learn the basics of holding the disc and complete passes." } ], "stem": [ { "club_name": "zapped", "description": "provides students an opportunity to make exciting gadgets and explore electricity." }, { "club_name": "loose in the chem lab", "description": "provides students an opportunity to put the scientific method to the test and get elbow deep in chemistry." } ] } } { "_id": 2, "name": "Lincoln High", "mascot": "Sharks", "teachers": [{ "first": "Jane", "last": "Smith", "classes": [{ "subject": "science", "grade": "9th" }, { "subject": "math", "grade": "12th" }] }, { "first": "John", "last": "Redman", "classes": [{ "subject": "art", "grade": "12th" }] }], "clubs": { "arts": [ { "club_name": "ceramics", "description": "provides students an opportunity to acquire knowledge of form, volume, and space relationships by constructing hand-built and wheel-thrown forms of clay." }, { "club_name": "digital art", "description": "provides students an opportunity to learn about design for entertainment, 3D animation, technical art, or 3D modeling." } ], "sports": [ { "club_name": "dodgeball", "description": "provides students an opportunity to play dodgeball by throwing balls to eliminate the members of the opposing team while avoiding being hit themselves." }, { "club_name": "martial arts", "description": "provides students an opportunity to learn self-defense or combat that utilize physical skill and coordination without weapons." } ] } }
Create an Atlas Search Index
In this section, you will create an Atlas Search index for the fields in the
embedded documents in the local_school_district.schools
collection.
Required Access
To create an Atlas Search index, you must have Project Data Access Admin
or higher access to the project.
Procedure
In Atlas, go to the Clusters page for your project.
If it is not already displayed, select the organization that contains your desired project from the Organizations menu in the navigation bar.
If it is not already displayed, select your desired project from the Projects menu in the navigation bar.
If the Clusters page is not already displayed, click Database in the sidebar.
Enter the Index Name, and set the Database and Collection.
In the Index Name field, enter
embedded-documents-tutorial
.Note
If you name your index
default
, you don't need to specify anindex
parameter when using the $search pipeline stage. Otherwise, you must specify the index name using theindex
parameter.In the Database and Collection section, find the
local_school_district
database, and select theschools
collection.
Specify an index configuration that indexes embedded documents.
To learn more about the index definition, see About the Atlas Search Index.
Run $search
Queries Against Embedded Document Fields
You can run queries against the embedded document fields. This tutorial uses embeddedDocument and text operators inside the compound operator in the queries.
In this section, you will connect to your Atlas cluster and run
the sample queries using the operators against the fields in the
schools
collection.
➤ Use the Select your language drop-down menu on this page to set the language of the examples in this section.
Run $searchMeta
Query Against Embedded Document Fields
You can run $searchMeta
queries against the embedded
document fields. In this section, you will connect to your Atlas
cluster and run a sample query using the $searchMeta
stage and
facet on an embedded document field.