Skip to content

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 updates
  • updateMany() for multiple document updates
  • replaceOne() to replace entire document
  • Use various operators for different update needs
  • upsert can "update if exists, insert if not"

In the next chapter, we will learn about MongoDB Delete Document.

Content is for learning and research only.