How to Index the Elements of an Array
On this page
For indexing arrays, Atlas Search requires only the data type of the array
elements. You don't have to specify that the data is contained in an
array ([]
) in the index definition.
If you enable dynamic mappings, Atlas Search automatically indexes elements of dynamically indexable data types inside the array. To learn more about the data types that Atlas Search dynamically indexes, see Data Types.
You can use the Visual Editor or the JSON Editor in the Atlas UI to define the index for elements in arrays.
How Does Atlas Search Index Array Elements?
Atlas Search indexes the supported data types inside an array by flattening the fields during indexing.
Example
Consider the following documents:
doc1 = { a: {b: [[<value1>, <value2>], <value3>] }} doc2 = { a: {b: [<value1>, <value2>, <value3>] } } doc3 = { a: [{ b: <value1>}, {b: <value2>}, {b: <value3>}] }
Atlas Search flattens the preceding arrays similar to the following during indexing:
LuceneDoc<n> = {"a.b":[<value1>,<value2>,<value3>]}
How Can I Index Objects in Arrays?
To query fields inside an array of documents or objects, you must use the embeddedDocuments type to index the field that contains the array of objects.
Review the Limitations
Atlas Search doesn't index the following Atlas Search field types if the field type is contained in an array or is in a document that is contained in an array:
Define the Index for the Array Elements
To define the index for the array elements, choose your preferred configuration method in the Atlas UI and then select the database and collection.
Try an Example for Indexing Array Elements
The following index definition example uses the sample_mflix.movies collection. If you have the sample data already loaded on your cluster, you can use the Visual Editor or JSON Editor in the Atlas UI to configure the index. After you select your preferred configuration method, select the database and collection, and refine your index to add field mappings.
The following index definition indexes the genres
field, which
contains an array of string values.