Open In App

Python MongoDB - find_one_and_update Query

Last Updated : 04 Jul, 2025
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

find_one_and_update() method in PyMongo is used to find a single document, update it, and return the original or updated document. This is useful when you need to both modify and retrieve a document in one operation. You define a filter to match the document and specify the update using operators like $set.

Syntax

collection.find_one_and_update(filter, update, options)

Parameters:

  • filter (dict): A query that matches the document to update.
  • update (dict): The update operations to apply (e.g., using $set, $inc, etc.).
  • projection (dict, optional): Specifies the fields to return.
  • sort (list of tuples, optional): Determines which document to update if multiple match (e.g., [("field", pymongo.ASCENDING)]).
  • return_document (optional): Determines whether to return the updated document or the original. Use ReturnDocument.AFTER to return the updated one.
  • upsert (bool, optional): If True, inserts a new document if no match is found.
  • hint (optional): Index to use for the query.

Let's see some Examples to understand it better.

Sample Collection used in this Article:

python-mongodb-sample-database3

Example 1:

Python
from pymongo import MongoClient
from pymongo import ReturnDocument

client = MongoClient('localhost', 27017)

db = client['GFG']
doc = db['Student']

# Update Raju's branch to ECE and return the updated document
updated_doc = doc.find_one_and_update(
    {"_id": 5},  # You can also use {"name": "Raju"} since both are valid
    {"$set": {"Branch": "ECE"}},
    return_document=ReturnDocument.AFTER
)
print("Updated Document:")
print(updated_doc)

Output

findAndUpdate_output
Output of find_one_and_update Query

Explanation:

  • find_one_and_update() finds the document with _id: 5 and updates the "Branch" to "ECE".
  • "$set" operator is used to change only the "Branch" field.
  • ReturnDocument.AFTER returns the updated document.

Example 2: 

Python
from pymongo import MongoClient
from pymongo import ReturnDocument

client = MongoClient('localhost', 27017)
db = client['GFG']
doc = db['Student']

# Update Raju's Roll Number
updated_doc = doc.find_one_and_update(
    {'name': "Raju"},  
    {'$set': { "Roll No": "1010" }},  
    projection={ "name": 1, "Roll No": 1},  
    return_document=ReturnDocument.AFTER  
)
print("Updated Document:")
print(updated_doc)

Output

newupdate
Output of find_one_and_update Query

Explanation:

  • find_one_and_update() finds the document where "name" is "Raju" and updates his "Roll No" to "1010".
  • projection limits the returned fields to only "name" and "Roll No".
  • ReturnDocument.AFTER returns the document after the update.

Related Articles:


Next Article
Article Tags :
Practice Tags :

Similar Reads