Dung (Donny) Nguyen

Senior Software Engineer

Querying

Querying in MongoDB is versatile and powerful, allowing us to retrieve and manipulate data efficiently using a flexible query language based on JSON syntax. Here’s an overview of how querying is done in MongoDB:

Basic Query Syntax

MongoDB queries are structured as JSON objects, with fields and values specifying the criteria for the query.

Example: Find All Documents

To retrieve all documents in a collection, use the find method without any criteria.

db.collection.find({});

Query Operators

MongoDB provides a rich set of query operators to filter data based on specific conditions.

1. Comparison Operators

// Example: Find users aged 30
db.users.find({ age: { $eq: 30 } });

2. Logical Operators

// Example: Find users aged 30 or named 'Alice'
db.users.find({ $or: [{ age: 30 }, { name: 'Alice' }] });

3. Element Operators

// Example: Find documents where the field 'email' exists
db.users.find({ email: { $exists: true } });

Projection

Projection is used to specify which fields should be returned in the query result.

Example: Return Only the Name and Age Fields

db.users.find({}, { name: 1, age: 1 });

Sorting

MongoDB supports sorting query results using the sort method.

Example: Sort by Age in Ascending Order

db.users.find().sort({ age: 1 });

Limiting and Skipping Results

We can limit the number of documents returned and skip a specified number of documents.

Example: Limit to 10 Results and Skip the First 5

db.users.find().limit(10).skip(5);

Aggregation

For more complex queries, MongoDB provides the Aggregation Framework, which allows us to process data through a pipeline of stages.

Example: Group by Age and Count the Number of Users

db.users.aggregate([
  { $group: { _id: "$age", count: { $sum: 1 } } }
]);

Indexes

Indexes can improve query performance. You can create indexes on fields to speed up data retrieval.

Example: Create an Index on the Age Field

db.users.createIndex({ age: 1 });

MongoDB supports full-text search using text indexes.

db.articles.createIndex({ content: "text" });
db.articles.find({ $text: { $search: "MongoDB" } });

Example Use Case

Let’s say we have a collection named users and we want to find all users aged 30, sorted by their name, and only return their name and age fields.

db.users.find({ age: 30 }, { name: 1, age: 1 }).sort({ name: 1 });

This query retrieves all users aged 30, sorts them by name in ascending order, and returns only the name and age fields for each user.

MongoDB’s querying capabilities are flexible and powerful, making it easy to retrieve and manipulate data according to our requirements.