How to Index Fields in Arrays of Objects and Documents
On this page
Note
The Atlas Search embeddedDocuments
index option, embeddedDocument operator, and
embedded
scoring option are in preview. When an Atlas Search
index on a replica set or single MongoDB shard reaches Lucene's two
billion document limit, Atlas Search doesn't index new documents or apply
updates to existing documents for that index. A solution to accommodate
this limitation will be in place when this feature is generally
available. To troubleshoot any issues related to using this feature,
contact Support.
You can use the Atlas Search embeddedDocuments
type to index fields in
documents and objects that are elements of an array. Atlas Search indexes
embedded documents independent of their parent document. Each indexed
document contains only fields that are part of the embedded document
array element. You can use only the embeddedDocument
operator to query fields indexed as embeddedDocuments
type.
Atlas Search doesn't dynamically index
fields of type embeddedDocument
. You must use static mappings to index embeddedDocument
fields. You can
use the Visual Editor or the JSON Editor in the Atlas UI
to index fields of type embeddedDocument
.
Review embeddedDocuments
Type Limitations
Note
Atlas Search doesn't support indexing more than two billion
index objects, where each indexed embedded document counts as a single
object. Using the embeddedDocuments
field type can result in indexing
objects over this limit, which causes an index to transition to a failed state.
If your collection has large arrays that might generate two billion objects, you
must shard any clusters that contain
indexes with the embeddedDocuments
type.
The following limitations apply:
You can use
embeddedDocuments
only on fields with up to5
levels of nesting. AnembeddedDocuments
field can't have more than4
parentembeddedDocuments
fields.You can't use
embeddedDocuments
for date or numeric faceting.You can't define a field inside the
embeddedDocuments
type as the knnVector type.You can't index children of fields indexed as the
embeddedDocuments
type as the token type.For highlighting fields within embedded documents, you must also index the parent of the field that you want to highlight as the document type.
You can do the following only if you index the parents of the embedded document child field as the document type:
Faceted search on string fields within embedded documents. You must also index the field that you want to facet on as the stringFacet type.
Note
When you facet on a string field inside embedded documents, Atlas Search returns facet count for only the number of matching parent documents.
You can't facet on numeric and date fields in embedded documents.
Highlight fields within embedded documents. For an example, see the How to Run Atlas Search Queries Against Objects in Arrays tutorial.
Sort by the parent of the embedded document field. You must also index the embedded document field with string values as the token type. For child fields with number and date values, enable dynamic mapping to index those fields automatically. For an example, see Sort Example.
Define the Index for the embeddedDocument
Type
To define the index for the embeddedDocument
type, choose your preferred
configuration method in the Atlas UI and then select the
database and collection.
Configure embeddedDocument
Field Properties
The Atlas Search embeddedDocuments
type takes the following parameters:
Field | Type | Necessity | Description | Default |
---|---|---|---|---|
type | string | Required | Human-readable label that identifies the field type.
Value must be embeddedDocuments . | |
dynamic | boolean | Optional | Flag that specifies whether to index every dynamically indexable field in the document. Value can be one of the following:
| false |
fields | document | Optional | Fields to index. If If NoteAtlas Search doesn't support indexing facet fields as part of an
| {} |
Try an Example for the embeddedDocument
Type
The following index definition example uses the sample_supplies.sales 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.