$push (Array Gather Accumulator)
Last updated: 2026-10-09
$push (Array Gather Accumulator)
$push is an accumulator appending each document's expression result to an array during $group, in input order (usually not guaranteed stable). It gathers group details into a single document. $sort first when you need a stable order.
| Category | Accumulators |
|---|---|
| MongoDB Version | 1.0+ |
| Example Language | mongosh (Shell) |
📝 Syntax
{ $group: { _id: <key>, items: { $push: "$field" } } }
Returns:Array of every expression result in the group
▶ Example
Run the commands below in your local mongosh (requires a running mongod):
// $push: gather items per customer
db.orders.aggregate([
{ $group: { _id: '$cust_id', items: { $push: '$item' } } }
])
Output:
{ "_id": "A123", "items": ["Pen", "Book"] }
📌 Notes
- Order tracks input order and is not guaranteed stable
- A preceding $sort makes the order deterministic
- Trim with $slice; deduplicate with $addToSet
🏷️ Related Tags
💡 Related Cases
Introduction to Aggregate Pipelines: The `aggregate` Method and the Basic Stage
$facet + $bucket + Text/Geospatial Search
$lookup and Associations with Multiple Sets
📚 Related Tutorials
❓ FAQ
QIs $push output order stable?
ANot strictly; $sort earlier in the pipeline when order matters.
QWhat is the difference between $push and $addToSet?
A$push keeps duplicates; $addToSet deduplicates.
QHow do I collect only the first few elements?
AFollow $push with $slice, or $sort plus $limit before $group.