[JAVA-2255] Add builder for $facet aggregation stage Created: 20/Jul/16  Updated: 27/May/22  Resolved: 13/Sep/16

Status: Closed
Project: Java Driver
Component/s: Builders
Affects Version/s: None
Fix Version/s: 3.4.0

Type: New Feature Priority: Major - P3
Reporter: Rathi Gnanasekaran Assignee: Justin Lee
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 for Java driver
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 [ 13/Sep/16 ]

Author:

{u'username': u'evanchooly', u'name': u'Justin Lee', u'email': u'justin.lee@10gen.com'}

Message: JAVA-2232, JAVA-2255, JAVA-2256, JAVA-2275, JAVA-2277 new pipeline stages
Branch: master
https://github.com/mongodb/mongo-java-driver/commit/582f0f35d236dd865b8dfb2ecdcdb14ef2ae3739

Comment by Githook User [ 13/Sep/16 ]

Author:

{u'username': u'evanchooly', u'name': u'Justin Lee', u'email': u'justin.lee@10gen.com'}

Message: JAVA-2232, JAVA-2255, JAVA-2256, JAVA-2275, JAVA-2277 new pipeline stages
Branch: master
https://github.com/mongodb/mongo-java-driver/commit/eb715937752b0b0823ef6fe1c1dc4e980e8d2515

Generated at Thu Feb 08 08:56:44 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.