-
Type: New Feature
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
Fully Compatible
-
Query 15 (06/03/16), Query 16 (06/24/16)
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.
- is depended on by
-
CSHARP-1715 Add support for $facet aggregation stage
- Closed
-
JAVA-2255 Add builder for $facet aggregation stage
- Closed
- is duplicated by
-
SERVER-15611 Support returning both the matched documents and the count of matched documents in the aggregation framework
- Closed
- is related to
-
SERVER-12927 Support ROLLUP function in the $group aggregation operator
- Backlog
-
DRIVERS-297 Aggregation Framework Support for 3.4
- Closed