19. Set Operations and Array Uniqueness
$addToSet collects unique values during grouping, while $push retains duplicates. Array-set expressions include $setUnion, $setIntersection, $setDifference, and $setIsSubset.
Set operations are useful for tags, permissions, product categories, and unique identifiers. They treat arrays as sets for the operation; do not rely on a particular output order. If element order and duplicate occurrences matter, use array operators that preserve those semantics.
Code Example
db.orders.aggregate([
{ $match: { status: "delivered" } },
{ $unwind: "$items" },
{
$group: {
_id: "$customerId",
categories: { $addToSet: "$items.category" },
productIds: { $addToSet: "$items.productId" },
itemOccurrences: { $sum: 1 }
}
},
{ $set: { categoryCount: { $size: "$categories" }, productCount: { $size: "$productIds" } } }
]);Key Takeaways
- $addToSet collects unique values.
- $push retains duplicates.
- Set expressions support unions, intersections, and differences.
- Do not assume set results have a particular order.
Knowledge Check
Which accumulator collects unique categories?