Python MongoDB find_one_and_update Query (original) (raw)
Last Updated : 4 Jul, 2025
**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,set, 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:

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

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

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: