$unset (Remove Fields)
Last updated: 2026-10-09
$unset (Remove Fields)
$unset removes specified fields from documents, keeping everything else. It is shorthand for { $project: { field: 0 } } and can remove multiple fields at once, including nested paths via dotted notation. Handy for scrubbing sensitive fields like passwords or tokens and cleaning up intermediate fields.
| Category | Core Stages |
|---|---|
| MongoDB Version | 1.0+ |
| Example Language | mongosh (Shell) |
📝 Syntax
{ $unset: "<field>" } or { $unset: [ "<field1>", "<field2>" ] }
⚙️ Parameters
| field | A field name, or an array of field names, to remove. |
|---|
Returns:Document stream with the specified fields removed
▶ Example
Run the commands below in your local mongosh (requires a running mongod):
// $unset: remove sensitive fields and a nested card number
db.users.aggregate([
{ $unset: ['password', 'token', 'detail.card'] }
])
Output:
// Documents no longer carry password, token, or detail.card
📌 Notes
- Equivalent to an all-zero $project
- Dotted paths remove embedded sub-fields
- Use the array form to remove several fields at once
🏷️ Related Tags
💡 Related Cases
More hands-on cases coming soon.
📚 Related Tutorials
❓ FAQ
QCan $unset remove embedded fields?
AYes, with dotted paths like 'detail.card' to target one sub-field.
QHow does $unset differ from deleting fields with $project?
ANo real difference; $unset is syntactic sugar for the zero-projection, cleaner for many fields.
QWhat if $unset targets a missing field?
ANo error; the document passes through unchanged.