Read Data from MongoDB With Queries¶
Author: MongoDB Documentation Team
In the first Read Data from MongoDB guide, you retrieved a
document from the inventory
collection. In this guide, you
will:
- use the
insertMany
command to insert more documents into the collection - query the documents
Time required: 30 minutes
What You’ll Need¶
- If you have not already installed a client (e.g. a driver, MongoDB Compass, or the
mongo
shell), complete the Connect to MongoDB guide before attempting this guide.
- If you have not already installed a client (e.g. a driver, MongoDB Compass, or the
mongo
shell), complete the Connect to MongoDB guide before attempting this guide. - Enable Auth on your local instance of MongoDB.
Warning
If you are running MongoDB locally and have not enabled authentication, your MongoDB instance is not secure.
Check Your Environment¶
You will need to ensure that your MongoDB instance is running and accessible.
Check that you have an Atlas account and have deployed a MongoDB database cluster. See Get Started with Atlas for information on how to login and create a cluster in Atlas.
- Windows
- macOS
- Linux
To make sure that your MongoDB instance is running on Windows, run the following command from the Windows command prompt:
If a mongod.exe
instance is running, you will
see something like:
To make sure your MongoDB instance is running on Mac, run the following command from your terminal:
If a mongod
instance is running, you will see
something like:
To make sure your MongoDB instance is running on Linux, run the following command from your terminal:
If a mongod
instance is running, you will see
something like:
Procedure¶
Import Data and Query It¶
In the first part of this guide, you will insert more documents and retrieve some of these documents from MongoDB using a simple query.
Connect to your MongoDB instance.¶
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
Select the operating system platform on which you are running the MongoDB client you have selected.
- Windows
- macOS
- Linux
Pass the URI to the mongo shell followed by the --password
option. You will then be prompted for your password.
Pass the URI to the mongo shell followed by the --password
option. You will then be prompted for your password.
Pass the URI to the mongo shell followed by the --password
option. You will then be prompted for your password.
If you wish to manually configure your Compass connection, load
Compass and select the New Connection
link. You will see a
form where you can enter connection information for MongoDB.
Atlas users can copy a URI string from the Atlas console into Compass. MongoDB Compass can detect whether you have a MongoDB URI connection string in your system clipboard and auto- populate the connection dialog from the URI.
See Set Up Atlas Connectivity for information on how to get the Atlas connection string URI into your copy buffer.
If Compass was already running when you copied the URI string, click the NEW CONNECTION button.

You will be prompted to populate the connection dialog. Click Yes.
You should then populate the password field with the proper password for your MongoDB user in the connection form.
Note
Errors related to connecting through Compass will appear in red at the top of the Connect screen.
It’s a good idea to put your connection code in a class so that it can be reused.
If your connection_string
starts with mongodb+srv, you need to install the dnspython module with
Now add code to call the class you just created.
For the MongoDB java driver 3.7 and beyond, use the MongoClients.create()
method.
For legacy drivers (prior to 3.7), use:
The MongoDB.Bson
package is used in CRUD operations, so
you’ll import it here.
Replace your password and any parameters surrounded by $[]
in the connection string in the code below.
For now, you will use the context.TODO().
Later you’ll configure the context specific to your requirements.
You won’t know if the connection has been successful until you
use the connection. A ping is one way you can test the
connection. This is a full example of a Go connection to
mongoDB, including a test ping
.
In your Go workspace and project folder, run build.
Now run the binary. For binaries that are not installed, you’ll have to specify the path.
If you’d like to run the resulting binary without specifying a path, install the binary you just built into your Go workspace.
Now run the code. “yourprojectname” is the name of the project
directory that contains the file with your main()
function.
For installed binaries use:
For binaries that are not installed, you’ll have to specify the path.
The default timeout for the Go driver to connect to the database is 30 seconds. In the event that you are unable to connect, you will see an error that resembles this:
Switch to the test
Database¶
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
To switch to the test
database in the mongo
shell, type
If the database has not been created already, click the Create Database button.

Select the test
database on the left side of the Compass
interface. Compass will list all of the collections in the
database below the database name.

To access the test
database:
Switch to the test
database and
access the inventory
collection.
Within the connect block, set db
to the test
database.
To access the test
database:
Switch to the test
database and
access the inventory
collection.
To access the test
database:
Load more data into MongoDB.¶
Tip
If you have already imported data into your database using mongoimport, you can skip this step.
Before you can write queries to extract data in a meaningful way, you’ll need
to add more data to your database. You can do that by running the insertMany()
nethod:
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
For instructions on inserting documents in MongoDB Compass, see Insert Documents.
First you will need to create the MongoCollection object you would like to query against.
Now add the insertMany
call.
For completeness, this is how you might wrap this call and run it with the asyncio event loop.
First you will need to initialize the collection.
Next create the array of BsonDocuments and pass it to the insertMany
call on collection
.
Retrieve specific documents in a collection.¶
You can retrieve specific documents from a collection by applying filter criteria.
To specify filter criteria, pass a JSON document containing the
criteria you are searching for to the find
method.
The following example illustrate using a status of “D” as criteria for narrowing a find on a collection.
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
Copy the following filter into the Compass query bar and click Find:
For completeness, this is how you might wrap this call and run it with the asyncio event loop.
Iterate over the results.¶
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
By default, the shell will only show the first 20 documents and return a cursor. This is adequate when the result set only contains a few documents.
If your result set is larger, to see all of the results of your query, iterate the cursor.
Note
You can also manually iterate through the results by
typing it
when prompted by the shell.
You will see a list of all of the documents that match your criteria in the query window.
You can implement a java.util.function.Consumer
to print the
results of the iteration
Then iterate the cursor for documents, passing the
printConsumer
as a parameter.
In the code snippet above you may have noticed the code that iterates the results and prints them to the command line:
Iterate the results and print them to the command line:
Check your results.¶
If you have loaded data into your test database, you will see one or more JSON documents returned. Note that all records return have a status of “D”.
Note
Your ObjectId()
values will differ from those shown.
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other

Query Data Using Embedded Documents as Criteria¶
Now that you have an understanding of how to retrieve data using query documents, you will now query against embedded documents.
Retrieve specific documents in a collection based on the contents of an embedded document.¶
If you wish to select documents that match all of the fields in an embedded JSON object, specify an exact match of the embedded document, including all of the fields and values in that embedded document in the order in which they appear in the collection.
For example, the following query selects all documents where the
size
field equals the document { "h" : 14, "w" : 21, "uom" : "cm"}
:
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
Copy the following filter into the Compass query bar and click Find:
First you will need to create the MongoCollection object you would like to query against.
Now add the query.
For completeness, this is how you might wrap this call and run it with the asyncio event loop.
Iterate over the results.¶
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
This query does not require cursor iteration in mongo
shell
because the shell returns up to 20 results.
You will see a list of all of the documents that match your criteria in the query window.
You can implement a com.mongodb.Block
to print the results
of the iteration
Then iterate the cursor for documents, passing the
printBlock
as a parameter.
In the code snippet above you may have noticed the code that iterates the results and prints them to the command line:
Check your results.¶
If you have loaded data into your test database, you will see one or more JSON documents returned. Note that the record matches the selection criteria exactly.
Note
Your ObjectId()
values will differ from those shown.
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other

Query Data Using Embedded Documents With Dot Notation¶
Now you will explore how to query embedded documents using dot notation
.
Retrieve specific documents in a collection with dot notation.¶
If you wish to select documents that exactly match just one of the
fields in an embedded JSON object, use dot notation.
("field.nestedField"
).
When querying using dot notation., the field and nested field names must be inside quotation marks.
The following example selects all documents where the field uom
nested in the size
field equals "in"
:
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
Copy the following filter into the Compass query bar and click Find:
First you will need to create the MongoCollection object you would like to query against.
Now add the query.
For completeness, this is how you might wrap this call and run it with the asyncio event loop.
Iterate over the results.¶
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other
By default, the shell will only show the first 20 documents and return a cursor. This is adequate when the result set only contains a few documents.
If your result set is larger, to see all of the results of your query, iterate the cursor.
Note
You can also manually iterate through the results by
typing it
when prompted by the shell.
You will see a list of all of the documents that match your criteria in the query window.
You can implement a java.util.function.Consumer
to print the
results of the iteration
Then iterate the cursor for documents, passing the
printConsumer
as a parameter.
In the code snippet above you may have noticed the code that iterates the results and prints them to the command line:
Iterate the results and print them to the command line:
Check your results.¶
If you have loaded data into your test database, you will see one or
more JSON documents returned. Note that the result record has a uom
of in
.
Note
Your ObjectId()
values will differ from those shown.
- Mongo Shell
- Compass
- Python
- Java (Sync)
- Node.js
- Other

Create a method to print the results of the iteration
- Python
- Java (Sync)
- Motor
When you are done working with your MongoDB data, close your connection to MongoDB:
Summary¶
If you have successfully completed this guide, you have retrieved data from MongoDB using specific criteria as expressed in MongoDB’s query syntax. You have also used the embedded document query syntax to retrieve documents based on embedded fields.
What’s Next¶
In the next guide, you’ll learn how to read data from MongoDB using operators and compound queries.