w3resource

Querying Nested Objects in MongoDB: A Complete Guide

How to Query Nested Objects in MongoDB?

Querying nested objects in MongoDB allows you to retrieve documents based on criteria within subdocuments (embedded documents). MongoDB provides a dot (.) notation to access fields in nested objects, enabling you to query deeply embedded fields within documents effectively. This approach is useful for working with complex data structures and documents that contain multi-level objects.

Syntax:

To query a nested field in MongoDB, use the following syntax:

db.<collection>.find({ "parentField.nestedField": <value> });

Explanation:

  • parentField.nestedField: The path to the nested field, using dot notation.
  • <value>: The value to match for the specified nested field.

Example:

Assume we have a MongoDB collection named employees, where each document includes a nested address object. Here’s a sample document:

Code:

{
  "_id": 1,
  "name": "Alice",
  "age": 28,
  "address": {
    "city": "San Francisco",
    "state": "CA",
    "zip": "94105"
  }
}

To query documents where city within address is "San Francisco", use:

Code:

// Query the employees collection for documents with city as "San Francisco"

// Switch to the database containing employees collection
use companyDB;

// Query the nested field in the collection
db.employees.find({
  "address.city": "San Francisco"      // Match city within address
});

Where -

  • use companyDB;: Selects the companyDB database.
  • db.employees.find({...}): Initiates a query in the employees collection.
  • "address.city": "San Francisco": Uses dot notation to access the city field within the address subdocument.

Explanation:

  • Using Dot Notation:
    • MongoDB uses dot notation to access nested fields. The syntax parentField.nestedField enables MongoDB to directly target deeply embedded fields for filtering.
    • This method is highly effective for querying within complex documents, making it easy to locate specific records based on deeply nested fields.
  • Multiple Conditions on Nested Fields:
    • You can query multiple fields within a nested object by combining conditions in an object. For example, to find documents where city is "San Francisco" and state is "CA", you can extend the query as follows:

    Code:

    db.employees.find({
      "address.city": "San Francisco",
      "address.state": "CA"
    });
    
  • Using Operators in Nested Queries:
    • MongoDB supports operators like $gte, $lte, $in, etc., within nested fields. For example, if you want to find employees who live in California ("state": "CA") and have a zip code greater than "94000", you can write:

    Code:

    db.employees.find({
      "address.state": "CA",
      "address.zip": { $gt: "94000" }
    });
    

This approach is useful for complex filtering needs, especially in nested data structures.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/mongodb/snippets/how-to-query-nested-objects-in-mongodb.php