Front-end Tutorials

Front-end Tutorials

HTMLCSSSassJavaScriptReactJS
CMS Tutorials

CMS Tutorials

WordPress
Tutorials expand

MongoDB Aggregation

MongoDB $cmp Operator

Updated on Oct 30, 2024
By Mari Selvan
👁️ 24 - Views
⏳ 4 mins
💬 1 Comment
MongoDB $cmp Operator

Photo Credit to CodeToFun

🙋 Introduction

In MongoDB's aggregation framework, the $cmp operator emerges as a powerful tool for comparing numerical values within documents. This operator enables users to determine the relative order of two values, facilitating sorting, filtering, and other operations based on comparison criteria.

Let's delve into the details of how the $cmp operator functions within MongoDB's aggregation pipelines.

💡 Syntax

The syntax for the $cmp method is straightforward:

syntax.js
Copied
Copy To Clipboard
{ $cmp: [ <expression1>, <expression2> ] }
  • $cmp: This operator signifies that the subsequent operation will perform a comparison.
  • <expression1> and <expression2>: These represent the expressions whose values will be compared. They could be field references, mathematical expressions, or values.

📝 Example

⌨️ Input

Consider a collection named students containing documents with fields name and score, representing student information. Here are sample documents from the students collection:

Input
Copied
Copy To Clipboard
[
  { "_id": ObjectId("609c26812e9274a86871bc6a"), "name": "Alice", "score": 85 },
  { "_id": ObjectId("609c26812e9274a86871bc6b"), "name": "Bob", "score": 75 },
  { "_id": ObjectId("609c26812e9274a86871bc6c"), "name": "Charlie", "score": 90 }
]

🔄 Aggregation

Suppose we want to compare the scores of students and assign them labels based on their performance (e.g., "High", "Medium", "Low"). Here's how you can achieve this using the $cmp operator:

example.js
Copied
Copy To Clipboard
db.students.aggregate([
  {
    $project: {
      name: 1,
      score: 1,
      performance: {
        $switch: {
          branches: [
            { case: { $eq: [{ $cmp: ["$score", 80] }, 1] }, then: "High" },
            { case: { $eq: [{ $cmp: ["$score", 60] }, 1] }, then: "Medium" }
          ],
          default: "Low"
        }
      }
    }
  }
])

🧩 Explanation

  • $project: This stage reshapes documents to include additional fields based on the specified expressions.
  • $cmp: Compares the score field with reference values (80 and 60 in this case) to determine the relative order.
  • $switch: Evaluates conditions and returns corresponding results based on the comparison outcomes.

When discussing how the above aggregation works:

  • For the document with name "Alice" and score 85, the score is greater than or equal to 80, so the performance is labeled as "High".
  • For the document with name "Bob" and score 75, the score is less than 80 but greater than or equal to 60, so the performance is labeled as "Medium".
  • For the document with name "Charlie" and score 90, the score is greater than or equal to 80, so the performance is labeled as "High".

💻 Output

Now, let's take a look at the output generated by the aggregation pipeline:

Output
Copied
Copy To Clipboard
[
  { "_id": ObjectId("609c26812e9274a86871bc6a"), "name": "Alice", "score": 85, "performance": "High" },
  { "_id": ObjectId("609c26812e9274a86871bc6b"), "name": "Bob", "score": 75, "performance": "Medium" },
  { "_id": ObjectId("609c26812e9274a86871bc6c"), "name": "Charlie", "score": 90, "performance": "High" }
]

📚 Use Cases

  1. Sorting:

    The $cmp operator is useful for sorting documents based on numerical values, allowing users to define custom sorting orders.

  2. Categorization:

    By comparing values against thresholds, the $cmp operator facilitates the categorization of data into meaningful groups or labels.

  3. Ranking:

    Users can use the $cmp operator to rank documents based on numerical attributes, such as scores or ratings.

🎉 Conclusion

The $cmp operator in MongoDB's aggregation framework provides a flexible and efficient means of comparing numerical values within documents, enabling users to derive meaningful insights and make informed decisions based on comparison criteria. Whether you're sorting, categorizing, or ranking data, mastering the usage of $cmp empowers you to efficiently manipulate numerical data within MongoDB aggregation pipelines.

With its intuitive syntax and diverse applications, the $cmp operator proves to be a valuable asset for handling numerical data effectively within MongoDB. Incorporate it into your aggregation pipelines to unlock new dimensions of data analysis and gain deeper insights into your datasets.

👨‍💻 Join our Community:

To get interesting news and instant updates on Front-End, Back-End, CMS and other Frameworks. Please Join the Telegram Channel:

Author

author
👋 Hey, I'm Mari Selvan

For over eight years, I worked as a full-stack web developer. Now, I have chosen my profession as a full-time blogger at codetofun.com.

Buy me a coffee to make codetofun.com free for everyone.

Buy me a Coffee

Share Your Findings to All

Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
We make use of cookies to improve our user experience. By using this website, you agree with our Cookies Policy
AgreeCookie Policy