Back to Python
2026-01-135 min read

MongoDB Query (Python Programming)

Learn MongoDB Query (Python Programming) step by step with clear examples and exercises.

Title: MongoDB Query (Python Programming)

Why This Matters

MongoDB is a popular NoSQL database that uses JSON-like documents with optional schemas. Python is a versatile and widely used programming language, making it essential to know how to interact with MongoDB using Python for various projects. You'll learn about querying data from a MongoDB database using the PyMongo library in Python.

Prerequisites

Before diving into MongoDB queries with Python, you should have a basic understanding of:

  1. Python programming (variables, functions, lists, and dictionaries)
  2. JSON data format
  3. Database concepts (tables, rows, columns)
  4. Installing packages using pip
  5. Basic knowledge of MongoDB collections, documents, and fields.
  6. Familiarity with the PyMongo library is not required but recommended.

Core Concept

To interact with MongoDB in Python, we use the PyMongo library. First, you need to install it:

pip install pymongo

Now let's create a simple MongoDB database and collection using Python:

from pymongo import MongoClient

Connect to the local MongoDB instance

client = MongoClient()

Access the 'mydatabase' database

db = client['mydatabase']

Create a new collection called 'mycollection'

my_collection = db['mycollection']


Now, let's insert some data into the 'mycollection' collection:

Insert a single document

doc1 = {"name": "John", "age": 30, "city": "New York"}

my_collection.insert_one(doc1)

Insert multiple documents at once

doc2 = [{"name": "Jane", "age": 25, "city": "Los Angeles"}, {"name": "Mike", "age": 35, "city": "Chicago"}]

my_collection.insert_many(doc2)


Now that we have data in our MongoDB collection, let's learn how to query it using Python.

Worked Example

Let's retrieve all documents from the 'mycollection' collection and print them:

Query all documents from mycollection

results = my_collection.find()

Iterate through the results and print each document

for result in results:

print(result)


Output:

{u'name': u'John', u'age': 30, u'city': u'New York'}

{u'name': u'Jane', u'age': 25, u'city': u'Los Angeles'}

{u'name': u'Mike', u'age': 35, u'city': u'Chicago'}


### Querying Specific Fields

To query specific fields, you can use the `projection` parameter:

Query only names from mycollection

results = my_collection.find({}, {"name": 1})

Iterate through the results and print each name

for result in results:

print(result["name"])


Output:

John

Jane

Mike


### Filtering Documents

To filter documents based on certain conditions, you can use the `find()` method with a query document as an argument. Here's an example that retrieves only people older than 30:

Query for documents where age > 30 from mycollection

results = my_collection.find({"age": {"$gt": 30}})

Iterate through the results and print each document

for result in results:

print(result)


Output:

{u'name': u'Jane', u'age': 25, u'city': u'Los Angeles'}

{u'name': u'Mike', u'age': 35, u'city': u'Chicago'}


### Sorting Documents

To sort documents in ascending or descending order, you can use the `sort()` method:

Query for all documents and sort by age in ascending order

results = my_collection.find().sort("age", pymongo.ASCENDING)

Iterate through the results and print each document

for result in results:

print(result)


Output:

{u'name': u'John', u'age': 30, u'city': u'New York'}

{u'name': u'Jane', u'age': 25, u'city': u'Los Angeles'}

{u'name': u'Mike', u'age': 35, u'city': u'Chicago'}


### Limiting Results

To limit the number of results returned, you can use the `limit()` method:

Query for all documents and limit to 2 results

results = my_collection.find().limit(2)

Iterate through the results and print each document

for result in results:

print(result)


Output:

{u'name': u'John', u'age': 30, u'city': u'New York'}

{u'name': u'Jane', u'age': 25, u'city': u'Los Angeles'}

Common Mistakes

  1. Forgetting to import the PyMongo library:
from pymongo import MongoClient # Always remember this!
  1. Misunderstanding the connection process:

Correct: Connect to the local MongoDB instance

client = MongoClient()

Incorrect: Connect to a remote MongoDB instance (replace 'myusername' and 'mypassword')

client = MongoClient('mongodb://myusername:mypassword@localhost:27017/')


3. Not creating a collection before inserting data:

Correct: Create the collection first, then insert data

db.create_collection('mycollection')

db['mycollection'].insert_one(doc1)


4. Using incorrect field names in queries:

Incorrect: age should be 'age' not 'ages'

results = my_collection.find({"ages": {"$gt": 30}})


5. Not handling exceptions when querying the database:

try:

Your MongoDB code here

except Exception as e:

print(f"An error occurred: {e}")


6. Misusing sorting methods:

Incorrect: Use .sort() method for sorting, not .sorted()

results = my_collection.find().sorted("age", pymongo.ASCENDING)


7. Not specifying the database name when creating a client or accessing a collection:

Incorrect: Forgetting to specify the database name

db = MongoClient()['mydatabase']['mycollection']

Practice Questions

  1. Write a Python script to query for documents with an age greater than 30 from the 'mycollection' collection and print them.
  2. Write a Python script to update John's city in the 'mycollection' collection to "San Francisco".
  3. Write a Python script to delete Jane from the 'mycollection' collection.
  4. Write a Python script to find all documents where age is between 20 and 30 and print their names.
  5. Write a Python script to sort documents in the 'mycollection' collection by name in ascending order and print them.
  6. Write a Python script to limit the results returned from the 'mycollection' collection to 10 documents and print them.
  7. Write a Python script to create an index on the 'age' field in the 'mycollection' collection.
  8. Write a Python script to perform a count of all documents in the 'mycollection' collection.
  9. Write a Python script to find documents where the city is either "New York" or "Los Angeles".
  10. Write a Python script to create a new collection called 'mynewcollection' and insert documents from 'mycollection'.

FAQ

Q: How can I connect to a remote MongoDB instance using PyMongo?

A: To connect to a remote MongoDB instance, replace the localhost in the connection string with your server's IP address or domain name and provide valid authentication credentials if required.

Q: Can I use PyMongo to perform complex queries like aggregation and sorting?

A: Yes! PyMongo supports various advanced features such as aggregation pipelines, sorting, filtering, and more. To learn about these features, visit the official PyMongo documentation.

Q: How can I handle exceptions when working with MongoDB using Python?

A: You can use try-except blocks to catch exceptions in your code. For example:

try:

Your MongoDB code here

except Exception as e:

print(f"An error occurred: {e}")


4. Q: How do I create indexes on my collections using PyMongo?
A: To create an index, you can use the `create_index()` method on a collection. For example:

my_collection.create_index([("age", pymongo.ASCENDING)])


This creates an ascending index on the 'age' field in the 'mycollection' collection. You can learn more about indexing in MongoDB at [MongoDB's official documentation](https://docs.mongodb.com/manual/indexes/).
MongoDB Query (Python Programming) | Python | XQA Learn