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?