In Python, MongoDB offers a module called PyMongo which allows us to work with MongoDB. Here, we will take the first step in learning how to retrieve data from a MongoDB database with PyMongo. MongoDB’s find() method will be used in this tutorial. In PyMongo, we can use find() function to select or retrieve documents from the MongoDB database.
Prerequisites
Before learning about retrieval of data using find() method in PyMongo, you should be familiar with following:
- Python syntax and structures
- Basic understanding of MongoDB
Install PyMongo
You should first install the PyMongo library to your machine to use PyMongo functions. You can install it via pip:
!pip install pymongo
Connect to MongoDB
If you want to work with a MongoDB database via PyMongo, you must first establish a connection to the database. Here is one example of how to accomplish this. However, the below code assumes that the MongoDB is running on the default host and port. Make the necessary changes to connect to a remote MongoDB instance.
# Import the pymongo library import pymongo # Create a MongoDB client object myclient = pymongo.MongoClient() # Connect to the database mydb = myclient["mydatabase"]
Retrieving the Data Using the find() Method
The most common way of retrieving data from MongoDB using PyMongo is to use the find() method. We can use find() method to select or retrieve documents from a MongoDB collection. Here is a basic example of using the PyMongo find() method to retrieve all of the documents in a collection:
# Retrieve all documents in a collection using the PyMongo find() method mycollection = mydb["mycollection"] for document in mycollection.find(): print(document)
The above code will retrieve all documents present in the “mycollection” collection of the “mydatabase” database.
Retrieving Specific Documents with find() method
We can also use the find() method to retrieve documents based on certain specific criteria. Here is an example of using the PyMongo find() method to retrieve all documents in a collection that has the value of “John” as its name:
# Retrieve all documents that have a name value of "John" mycollection = mydb["mycollection"] myquery = { "name": "John" } mydocs = mycollection.find(myquery) for document in mydocs: print(document)
The above code will retrieve all documents in “mycollection” collection with name field having value “John” . We used a query to specify search criteria as {‘name’: ‘John’}. It retrieves only those documents that match the specified criteria using ‘myquery’ variable.
Retrieving Selected Fields with find() method
We can use find() method select fields in a document. Here is an example of how we can use the PyMongo find() method to retrieve only specific fields in the retrieved documents:
# Retrieve only name and address fields from documents with a name value of "John" mycollection = mydb["mycollection"] myquery = { "name": "John" } myprojection = { "name": 1, "address": 1 } mydocs = mycollection.find(myquery, myprojection) for document in mydocs: print(document)
The above code will retrieve only name and address fields present in the documents that are retrieved from “mycollection” collection with name field having value “John”.
Combining search criteria in a query
We can combine multiple search criteria to get more specific results. Here is an example of using PyMongo find() method with a query that combines multiple search criteria to retrieve documents with the name “John” and age greater than 21:
# Retrieve all documents that have a name value of "John" and age greater than 21 mycollection = mydb["mycollection"] myquery = { "name": "John", "age": { "$gt": 21 } } mydocs = mycollection.find(myquery) for document in mydocs: print(document)
The above code will retrieve all documents with the name field having value “John” and the age field having a value greater than 21 present in the “mycollection” collection.
Limiting the Number of Documents Retrieved
The find() method allows us to limit the number of documents retrieved by passing an integer argument to the limit() method. For example, here’s a demonstration of how we can retrieve only the first two documents with the name “John” from “mycollection” collection with age greater than 21:
# Retrieve only the first two documents that have a name value of "John" and age greater than 21 mycollection = mydb["mycollection"] myquery = { "name": "John", "age": { "$gt": 21 } } mydocs = mycollection.find(myquery).limit(2) for document in mydocs: print(document)
The above code will retrieve only the first two documents with the name field having value “John” and the age field having a value greater than 21 present in the “mycollection” collection.
Sorting the Retrieved Documents
The find() method also allows us to sort the retrieved documents. We can use sort() ascending or descending order. Here is an example of how we can use the PyMongo find() method to retrieve documents and sort them in ascending order based on age:
# Retrieve all documents and sort them in ascending order based on their age field mycollection = mydb["mycollection"] mydocs = mycollection.find().sort("age") for document in mydocs: print(document)
The above code will retrieve all documents present in the “mycollection” collection and sort them in ascending order based on the age field.
Using Regular Expressions with the find() Method
We can also use find() method with regular expressions to retrieve documents from the MongoDB collections. Regular expressions can help you to find documents that match a particular pattern. Here is an example of using PyMongo find() method with a regular expression to retrieve all documents with name matches “J”:
# Retrieve all documents with name that matches pattern 'J' using the PyMongo find() method mycollection = mydb["mycollection"] myquery = { "name": { "$regex": "^J" } } mydocs = mycollection.find(myquery) for document in mydocs: print(document)
The above code will retrieve all documents present in the “mycollection” collection with name field matches pattern ‘J’ using ‘myquery’ variable.
Conclusion
So, In this article, you have learnt how to retrieve or select documents from a MongoDB collection using PyMongo’s find() method. We have examined several variations on how to use this method, including retrieving all documents, retrieving specific documents based on certain search criteria, and limiting the number of documents retrieved. Additionally, we looked at how to sort retrieved documents and use regular expressions to find documents based on patterns.