MongoDB Update Document
MongoDB provides multiple methods for updating documents, allowing you to update single or multiple documents.
Update Single Document
updateOne() Method
javascript
db.collection.updateOne(filter, update, options)Basic Example
javascript
// Update first matching document
db.users.updateOne(
{ name: "John" },
{ $set: { age: 26, updatedAt: new Date() } }
)Return Result
json
{
"acknowledged": true,
"matchedCount": 1,
"modifiedCount": 1
}Update Multiple Documents
updateMany() Method
javascript
db.collection.updateMany(filter, update, options)Basic Example
javascript
// Update all matching documents
db.users.updateMany(
{ status: "inactive" },
{ $set: { status: "active" } }
)Update Operators
$set - Set Field Value
javascript
// Set single field
db.users.updateOne(
{ name: "John" },
{ $set: { age: 26 } }
)
// Set multiple fields
db.users.updateOne(
{ name: "John" },
{ $set: { age: 26, city: "Boston" } }
)
// Set nested field
db.users.updateOne(
{ name: "John" },
{ $set: { "address.city": "Boston" } }
)
// Set array element
db.users.updateOne(
{ name: "John" },
{ $set: { "tags.0": "VIP" } }
)$unset - Remove Field
javascript
// Remove field
db.users.updateOne(
{ name: "John" },
{ $unset: { tempField: "" } }
)
// Remove multiple fields
db.users.updateOne(
{ name: "John" },
{ $unset: { tempField: "", oldField: "" } }
)$inc - Increment Value
javascript
// Increment value
db.users.updateOne(
{ name: "John" },
{ $inc: { age: 1 } } // age + 1
)
// Decrement value
db.users.updateOne(
{ name: "John" },
{ $inc: { age: -1 } } // age - 1
)
// Increment multiple fields
db.products.updateOne(
{ name: "iPhone" },
{ $inc: { stock: -1, sold: 1 } }
)$mul - Multiply Value
javascript
// Multiply value
db.products.updateOne(
{ name: "iPhone" },
{ $mul: { price: 0.9 } } // 10% discount
)$rename - Rename Field
javascript
// Rename field
db.users.updateMany(
{},
{ $rename: { "oldName": "newName" } }
)Array Operators
$push - Add Element to Array
javascript
// Add single element
db.users.updateOne(
{ name: "John" },
{ $push: { tags: "VIP" } }
)
// Add multiple elements
db.users.updateOne(
{ name: "John" },
{ $push: { tags: { $each: ["VIP", "Premium"] } } }
)
// Add to specific position
db.users.updateOne(
{ name: "John" },
{ $push: { tags: { $each: ["New"], $position: 0 } } }
)
// Sort and limit
db.users.updateOne(
{ name: "John" },
{ $push: { scores: { $each: [85], $sort: -1, $slice: 3 } } }
)$addToSet - Add to Set (No Duplicates)
javascript
// Add unique element
db.users.updateOne(
{ name: "John" },
{ $addToSet: { tags: "VIP" } }
)
// Add multiple unique elements
db.users.updateOne(
{ name: "John" },
{ $addToSet: { tags: { $each: ["VIP", "Premium", "VIP"] } } }
)$pop - Remove Array Element
javascript
// Remove last element
db.users.updateOne(
{ name: "John" },
{ $pop: { tags: 1 } }
)
// Remove first element
db.users.updateOne(
{ name: "John" },
{ $pop: { tags: -1 } }
)$pull - Remove Specified Element
javascript
// Remove specified value
db.users.updateOne(
{ name: "John" },
{ $pull: { tags: "VIP" } }
)
// Remove multiple values
db.users.updateOne(
{ name: "John" },
{ $pull: { tags: { $in: ["VIP", "Premium"] } } }
)
// Remove by condition
db.users.updateOne(
{ name: "John" },
{ $pull: { scores: { $lt: 60 } } }
)$pullAll - Remove All Specified Values
javascript
db.users.updateOne(
{ name: "John" },
{ $pullAll: { tags: ["VIP", "Premium"] } }
)Replace Document
replaceOne() Method
javascript
db.users.replaceOne(
{ name: "John" },
{
name: "John",
age: 26,
city: "Boston"
// Note: _id is not replaced
}
)Update Options
upsert - Insert if Not Exists
javascript
db.users.updateOne(
{ name: "New User" },
{ $set: { age: 20, createdAt: new Date() } },
{ upsert: true }
)writeConcern
javascript
db.users.updateOne(
{ name: "John" },
{ $set: { age: 26 } },
{
writeConcern: {
w: "majority",
j: true,
wtimeout: 5000
}
}
)Bulk Update
Bulk Operations
javascript
var bulk = db.users.initializeUnorderedBulkOp()
bulk.find({ name: "John" }).updateOne({ $set: { age: 26 } })
bulk.find({ name: "Jane" }).updateOne({ $set: { age: 31 } })
bulk.find({ status: "inactive" }).update({ $set: { status: "active" } })
bulk.execute()Update Examples
Comprehensive Example
javascript
// Update user info and add operation log
db.users.updateOne(
{ _id: ObjectId("...") },
{
$set: {
lastLogin: new Date(),
loginCount: 1
},
$inc: { loginCount: 1 },
$push: {
loginHistory: {
$each: [{ time: new Date(), ip: "192.168.1.1" }],
$slice: -10 // Keep only last 10 entries
}
}
}
)Summary
Key points for updating documents:
updateOne()for single document updatesupdateMany()for multiple document updatesreplaceOne()to replace entire document- Use various operators for different update needs
upsertcan "update if exists, insert if not"
In the next chapter, we will learn about MongoDB Delete Document.