Python MongoDB Tutorial – How to Find Documents with PyMongo

Last updated 2 weeks ago | 28 views 75     5

Tags:- Python MongoDB

Retrieving data is one of the most common tasks when working with databases. In MongoDB, you can find documents using simple queries or advanced filters. This tutorial will teach you how to use Python and PyMongo to find documents in MongoDB, whether you're searching for a single record or multiple results.


Table of Contents

  1. What is the Find Operation in MongoDB?

  2. Prerequisites

  3. Installing PyMongo

  4. Connecting to MongoDB

  5. Inserting Sample Data

  6. Using find_one() to Retrieve One Document

  7. Using find() to Retrieve Multiple Documents

  8. Filtering Queries

  9. Using Projection to Limit Fields

  10. Full Working Example

  11. Tips and Common Pitfalls


1. What is the Find Operation in MongoDB?

The find() operation in MongoDB is used to retrieve documents from a collection. You can fetch:

  • A single document with find_one()

  • Multiple documents with find()

MongoDB uses JSON-like query syntax to filter results.


⚙️ 2. Prerequisites

  • Python installed (3.x)

  • MongoDB running (locally or via MongoDB Atlas)

  • pymongo installed


3. Installing PyMongo

Install the MongoDB driver for Python using pip:

pip install pymongo

4. Connecting to MongoDB

Connect to Local Server:

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")

Connect to MongoDB Atlas (Cloud):

client = pymongo.MongoClient("mongodb+srv://username:[email protected]/?retryWrites=true&w=majority")

Replace placeholders with your actual Atlas credentials.


5. Inserting Sample Data

We'll use a collection named users for examples:

db = client["mydatabase"]
collection = db["users"]

collection.insert_many([
    {"name": "Alice", "age": 25, "email": "[email protected]"},
    {"name": "Bob", "age": 30, "email": "[email protected]"},
    {"name": "Charlie", "age": 28, "email": "[email protected]"}
])

6. Using find_one() to Retrieve One Document

user = collection.find_one()
print(user)

You can also filter:

user = collection.find_one({"name": "Alice"})
print(user)

Output:

{'_id': ObjectId('...'), 'name': 'Alice', 'age': 25, 'email': '[email protected]'}

7. Using find() to Retrieve Multiple Documents

for user in collection.find():
    print(user)

This returns a cursor that you can iterate over.


8. Filtering Queries with Conditions

Use query filters to match specific documents.

Find by field value:

query = {"age": 30}
for user in collection.find(query):
    print(user)

Find documents where age is greater than 25:

query = {"age": {"$gt": 25}}
for user in collection.find(query):
    print(user)

Other MongoDB operators:

Operator Description
$gt Greater than
$lt Less than
$gte Greater than or equal
$lte Less than or equal
$ne Not equal
$in In a list

9. Using Projection to Limit Fields

You can control which fields to return using projection:

for user in collection.find({}, {"_id": 0, "name": 1, "email": 1}):
    print(user)

This will return only name and email, excluding _id.


10. Full Working Example

import pymongo

# Connect to MongoDB
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["users"]

# Insert data (optional, if collection is empty)
if collection.count_documents({}) == 0:
    collection.insert_many([
        {"name": "Alice", "age": 25, "email": "[email protected]"},
        {"name": "Bob", "age": 30, "email": "[email protected]"},
        {"name": "Charlie", "age": 28, "email": "[email protected]"}
    ])

# Find one document
print("Find one:")
print(collection.find_one())

# Find all documents
print("\nFind all:")
for user in collection.find():
    print(user)

# Filter by condition
print("\nUsers aged over 25:")
for user in collection.find({"age": {"$gt": 25}}):
    print(user)

# Projection
print("\nName and email only:")
for user in collection.find({}, {"_id": 0, "name": 1, "email": 1}):
    print(user)

11. Tips and Common Pitfalls

Tip / Pitfall Solution
Don't forget to loop through find() results It's a cursor, not a list
Use projection to optimize performance Especially when documents have many fields
MongoDB allows dynamic schemas Be careful with inconsistent field names
Querying non-existent fields returns nothing Check your field spelling and case
Always check if data exists before querying Avoid empty results or errors

✅ Conclusion

The find() and find_one() methods in PyMongo are essential tools for querying data in MongoDB. Whether you're retrieving a single document or filtering complex results with conditions and projections, these tools give you powerful access to your data.

MongoDB's flexibility and Python's simplicity make them a great combination for modern data-driven applications.

 

Tips and Tricks


What is pass in Python?

Python | Pass Statement

The pass statement is used as a placeholder for future code. It represents a null operation in Python. It is generally used for the purpose of filling up empty blocks of code which may execute during runtime but has yet to be written.

 

def myfunction():
    pass

 


How can you generate random numbers?

Python | Generate random numbers

Python provides a module called random using which we can generate random numbers. e.g: print(random.random())

 

 

We have to import a random module and call the random() method as shown below:

 import random

 print(random.random())

The random() method generates float values lying between 0 and 1 randomly.


To generate customized random numbers between specified ranges, we can use the randrange() method
Syntax: randrange(beginning, end, step)
 

import random

print(random.randrange(5,100,2))

 


What is lambda in Python?

Python | Lambda function

A lambda function is a small anonymous function. This function can have any number of parameters but, can have just one statement.
 

 

Syntex: 
lambda arguments : expression
 

a = lambda x,y : x+y

print(a(5, 6))

It also provides a nice way to write closures. With that power, you can do things like this.

def adder(x):
    return lambda y: x + y

add5 = adder(5)

add5(1)    #6

As you can see from the snippet of Python, the function adder takes in an argument x and returns an anonymous function, or lambda, that takes another argument y. That anonymous function allows you to create functions from functions. This is a simple example, but it should convey the power lambdas and closures have.
 


What is swapcase() function in the Python?

Python | swapcase() Function

It is a string's function that converts all uppercase characters into lowercase and vice versa. It automatically ignores all the non-alphabetic characters.
 

string = "IT IS IN LOWERCASE."  

print(string.swapcase())  

 


How to remove whitespaces from a string in Python?

Python | strip() Function | Remove whitespaces from a string 

To remove the whitespaces and trailing spaces from the string, Python provides a strip([str]) built-in function. This function returns a copy of the string after removing whitespaces if present. Otherwise returns the original string.
 

string = "  Python " 
 
print(string.strip())  

 


What is the usage of enumerate() function in Python?

Python | enumerate() Function

The enumerate() function is used to iterate through the sequence and retrieve the index position and its corresponding value at the same time.
 

lst = ["A","B","C"] 
 
print (list(enumerate(lst)))

#[(0, 'A'), (1, 'B'), (2, 'C')]

 


Can you explain the filter(), map(), and reduce() functions?

Python | filter(), map(), and reduce() Functions

  • filter()  function accepts two arguments, a function and an iterable, where each element of the iterable is filtered through the function to test if the item is accepted or not.
    >>> set(filter(lambda x:x>4, range(7)))
    
    # {5, 6}
    
    

     

  • map() function calls the specified function for each item of an iterable and returns a list of result

    >>> set(map(lambda x:x**3, range(7)))
    
    # {0, 1, 64, 8, 216, 27, 125}

     

  • reduce() function reduces a sequence pair-wise, repeatedly until we arrive at a single value..
     

    >>> reduce(lambda x,y:y-x, [1,2,3,4,5])
    
    # 3
    

    Let’s understand this:

    2-1=1
    3-1=2
    4-2=2
    5-2=3

    Hence, 3.

 


What is a namedtuple?

Python | namedtuple

A namedtuple will let us access a tuple’s elements using a name/label. We use the function namedtuple() for this, and import it from collections.

>>> from collections import namedtuple

#format
>>> result=namedtuple('result','Physics Chemistry Maths') 

#declaring the tuple
>>> Chris=result(Physics=86,Chemistry=92,Maths=80) 

>>> Chris.Chemistry
# 92

 


Write a code to add the values of same keys in two different dictionaries and return a new dictionary.

We can use the Counter method from the collections module

from collections import Counter

dict1 = {'a': 5, 'b': 3, 'c': 2}
dict2 = {'a': 2, 'b': 4, 'c': 3}

new_dict = Counter(dict1) + Counter(dict2)


print(new_dict)
# Print: Counter({'a': 7, 'b': 7, 'c': 5})


 


Python In-place swapping of two numbers

 Python | In-place swapping of two numbers

>>> a, b = 10, 20
>>> print(a, b)
10 20

>>> a, b = b, a
>>> print(a, b)
20 10

 


Reversing a String in Python

Python | Reversing a String

>>> x = 'PythonWorld'
>>> print(x[: : -1])
dlroWnohtyP

 


Python join all items of a list to convert into a single string

Python | Join all items of a list to convert into a single string

>>> x = ["Python", "Online", "Training"]
>>> print(" ".join(x))
Python Online Training

 


python return multiple values from functions

Python | Return multiple values from functions

>>> def A():
	return 2, 3, 4

>>> a, b, c = A()

>>> print(a, b, c)
2 3 4

 


Python Print String N times

Python | Print String N times

>>> s = 'Python'
>>> n = 5

>>> print(s * n)
PythonPythonPythonPythonPython

 


Python check the memory usage of an object

Python | Check the memory usage of  an object

>>> import sys
>>> x = 100

>>> print(sys.getsizeof(x))
28