How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?

Susan Sarandon
Release: 2024-10-26 19:20:29
Original
471 people have browsed it

How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?

Retrieve Item List by Checking Multiple Attribute Values in MongoDB

When working with MongoDB, it often becomes necessary to retrieve specific items based on multiple attribute values, similar to the IN condition used in MySQL. This article demonstrates how to achieve this using a combination of pipeline operations in MongoDB.

Aggregation Framework

In this scenario, we'll use the aggregation framework to construct a pipeline that filters and aggregates data from a MongoDB collection known as "venueList." The goal is to retrieve the total count of users with specific operating systems, such as Linux or Ubuntu, based on a list of venue IDs.

Pipeline Stages

The pipeline consists of several stages that work together to transform and summarize the data:

  1. $match: Filters the collection based on the specified venue IDs, ensuring that only relevant documents are considered.
  2. $unwind: Denormalizes the "venueList" and "sum" arrays to create individual documents for each venue and user agent distribution.
  3. $match: Filters the denormalized documents again to ensure that only the desired venue IDs are included.
  4. $unwind: Further denormalizes the "sum" array to create individual documents for each user agent distribution.
  5. **$group:** Aggregates the denormalized documents using the $cond operator to create separate fields for each operating system (e.g., "linux" and "ubuntu"). The $sum operator is used to calculate the total count of users for each operating system.

Expected Output

The final output of the aggregation pipeline will be a document containing the total count of Linux and Ubuntu users across the specified venue IDs:

<code class="json">{
  "_id": null,
  "linux": 14,
  "ubuntu": 4
}</code>
Copy after login

Go Implementation

To use this pipeline in Go using the mgo package, you can follow these steps:

<code class="go">query := []bson.M{
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList"},
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList.sum"},
  {
    "$group": bson.M{
      "_id":        nil,
      "linux":      bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "linux"}}, "$venueList.sum.value", 0}}},
      "ubuntu":     bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "ubuntu"}}, "$venueList.sum.value", 0}}},
    },
  },
}</code>
Copy after login

The above is the detailed content of How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!