[CSHARP-1715] Add support for $facet aggregation stage Created: 20/Jul/16  Updated: 27/May/22  Resolved: 09/Nov/16

Status: Closed
Project: C# Driver
Component/s: None
Affects Version/s: None
Fix Version/s: 2.4

Type: New Feature Priority: Major - P3
Reporter: Rathi Gnanasekaran Assignee: Robert Stam
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
depends on SERVER-23654 Add $facet aggregation stage Closed
is depended on by DRIVERS-297 Aggregation Framework Support for 3.4 Closed
Epic Link: MongoDB 3.4
Server Compat: 3.3

 Description   

Syntax

{
  $facet: {
    facetName1: [<stage1>, <stage2>, <stage3>],
    facetName2: [<stage4>, <stage5>, …],
    ...
  }
}

Examples

> db.example.insert([
    {
      _id: "product1",
      avgReview: 4.3,
      price: 21,
      category: "TVs",
      title: "Sony 42 inch HDTV",
      attributes: [
        {name: "type", value: "HD"},
        {name: "screen size", value: 42},
        {name: "manufacturer", value: "Sony"},
        ...
      ]
    }
    ...
])
> db.example.aggregate([
{$match: {category: "TVs"}},  // Match all relevant results.
{$facet: {
  "Screen Sizes": [
     {$unwind: "$attributes"},
     {$match: {"attributes.name": "screen size"}},
     {$group: {
         _id: { /* Use $switch to compute buckets for screen sizes */ },
         count: {$sum: 1}
     }}
   ],
 
   "Manufacturer": [
     {$match: {"attributes.name": "manufacturer"}},
     {$group: {_id: "$attributes.value", count: {$sum: 1}}},
     {$sort: {count: -1}}
     {$limit: 5}
   ]
}}
])
 
// Output.
{
  "Screen Size": [
    {_id: {min: MinKey, max: 32}, count: 32},
    {_id: {min: 32, max: 42}, count: 32},
    {_id: {min: 42, max: 50}, count: 33},
    {_id: {min: 50, max: MaxKey}, count: 33}
  ],
  "Manufacturer": [
    {_id: "Sony", count: 54},
    {_id: "Samsung", count: 45},
    {_id: "LG", count: 34},
    {_id: "Sharp", count: 22},
    {_id: "Vizio", count: 14},
  ]
}   

Behavior

  • names of sub-pipelines (keys in the document) must be unique.
  • This is a blocking stage.


 Comments   
Comment by Githook User [ 09/Nov/16 ]

Author:

{u'username': u'rstam', u'name': u'rstam', u'email': u'robert@robertstam.org'}

Message: CSHARP-1715: Added support for $facet aggregation stage.
Branch: master
https://github.com/mongodb/mongo-csharp-driver/commit/4e06ffaf0d8159844ef79e9ceac23ba92a9ffcb5

Generated at Wed Feb 07 21:40:28 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.