Docs Menu
Docs Home
/
Start with Guides

Read Data from MongoDB With Queries

In the previous guide, Read Data in MongoDB, you retrieved all documents from the sample_guides.planets collection without specifying any criteria that the documents should meet.

In this guide, you will query the collection and retrieve documents that match specific equality criteria, meaning the values of the specified field or fields must match.

Time required: 15 minutes

1

Tip

In this code block there is a comment to replace the connection URI with your own. Replace the URI string with your own Atlas connection string.

Tip

The following is an outline with the minimum code necessary to connect to MongoDB. You'll make additions over the next few steps to read data.

At line 5, replace the URI string with your own Atlas connection string.

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9// database and collection code goes here
10// find code goes here
11// iterate code goes here
12
13
14

Tip

The following is an outline with the minimum code necessary to connect to MongoDB. You'll make additions over the next few steps to read data.

At line 11, replace the URI string with your own Atlas connection string.

crudRead.go
1package main
2
3import (
4 "context"
5
6 "go.mongodb.org/mongo-driver/mongo"
7 "go.mongodb.org/mongo-driver/mongo/options"
8)
9
10func main() {
11 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
12
13 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
14 if err != nil {
15 panic(err)
16 }
17
18 defer func() {
19 if err = client.Disconnect(context.TODO()); err != nil {
20 panic(err)
21 }
22 }()
23
24 // database and colletion code goes here
25 // find code goes here
26 // iterate code goes here
27}

Tip

The following is an outline with the minimum code necessary to connect to MongoDB. You'll make additions over the next few steps to read data.

At line 8, replace the URI string with your own Atlas connection string.

CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 // database and collection code goes here
12 // find code goes here
13 // iterate code goes here
14 }
15 }
16}

Tip

The following is an outline with the minimum code necessary to connect to MongoDB. You'll make additions over the next few steps to read data.

At line 4, replace the URI string with your own Atlas connection string.

crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 // database and collection code goes here
10 // find code goes here
11 // iterate code goes here
12 } finally {
13 // Ensures that the client will close when you finish/error
14 await client.close();
15 }
16}
17run().catch(console.dir);

Tip

The following is an outline with the minimum code necessary to connect to MongoDB. You'll make additions over the next few steps to read data.

At line 4, replace the URI string with your own Atlas connection string.

crud_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7
8# database and collection code goes here
9# find code goes here
10# iterate code goes here
11
12# Close the connection to MongoDB when you're done.
13client.close()

Tip

mongodb+srv

Make sure you've installed PyMongo with the srv option.

python3 -m pip install "pymongo[srv]"
2

Switch to the database and collection you want to query. In this case you will use the sample_guides database and planets collection.

CrudRead.cs
// database and collection code goes here
var db = client.GetDatabase("sample_guides");
var coll = db.GetCollection<BsonDocument>("planets");
crudRead.go
1// database and colletion code goes here
2db := client.Database("sample_guides")
3coll := db.Collection("planets")
CrudRead.java
1// database and collection code goes here
2MongoDatabase db = mongoClient.getDatabase("sample_guides");
3MongoCollection<Document> coll = db.getCollection("planets");
crud-read.js
// database and collection code goes here
const db = client.db("sample_guides");
const coll = db.collection("planets");
crud_read.py
# database and collection code goes here
db = client.sample_guides
coll = db.planets
3

You can retrieve specific documents from a collection by applying a query filter. A query filter is a document that contains the criteria you are searching for. The following example illustrates using a query filter to retrieve documents from the planets collection that have a hasRings field with a value of true.

CrudRead.cs
// find code goes here
var cursor = from planet in coll.AsQueryable()
where planet["hasRings"] == true
select planet;

Tip

BSON.D should be used when sending documents to MongoDB, because BSON.D is ordered. This is important in more complex operations.

crudRead.go
1// find code goes here
2filter := bson.D{{"hasRings", true}}
3cursor, err := coll.Find(context.TODO(), filter)
4if err != nil {
5 panic(err)
6}

The MongoDB Java Driver includes Builders that simplify the process of creating queries (and other operations). Here, you use the Filters.eq builder to construct the query document.

CrudRead.java
1// find code goes here
2Bson filter = eq("hasRings", true);
3MongoCursor<Document> cursor = coll.find(filter).iterator();
crud-read.js
// find code goes here
const cursor = coll.find({ hasRings: true });
crud_read.py
# find code goes here
cursor = coll.find({"hasRings": True})
4
CrudRead.cs
// iterate code goes here
foreach (var document in cursor.ToEnumerable())
{
Console.WriteLine(document);
}
crudRead.go
1// iterate code goes here
2for cursor.Next(context.TODO()) {
3 var result bson.M
4 if err := cursor.Decode(&result); err != nil {
5 panic(err)
6 }
7 fmt.Println(result)
8}
9if err := cursor.Err(); err != nil {
10 panic(err)
11}
CrudRead.java
1// iterate code goes here
2try {
3 while (cursor.hasNext()) {
4 System.out.println(cursor.next().toJson());
5 }
6} finally {
7 cursor.close();
8}

Iterate the results and print them to the console. Operations like this are asychronous in the MongoDB Node.js driver by default, meaning the Node.js runtime doesn't block other operations while waiting for them to finish execution.

In order to simplify the operation, you specify the await keyword, which will cause the runtime to wait for the operation. This is often easier than specifying a callback, or chaining a promise.

For more information, see the Promise and Callbacks guide.

crud-read.js
// iterate code goes here
await cursor.forEach(console.log);
crud_read.py
# iterate code goes here
for doc in cursor:
print(doc)
5

Here is the complete code followed by sample output.

Note

Your ObjectId values will differ from those shown.

Here is the complete code followed by sample output.

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9// database and collection code goes here
10var db = client.GetDatabase("sample_guides");
11var coll = db.GetCollection<BsonDocument>("planets");
12// find code goes here
13var cursor = from planet in coll.AsQueryable()
14 where planet["hasRings"] == true
15 select planet;
16// iterate code goes here
17foreach (var document in cursor)
18{
19 Console.WriteLine(document);
20}
21
22
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

Here is the complete code followed by sample output. The output documents have been truncated here for display purposes.

crudRead.go
1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
14
15 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
16 if err != nil {
17 panic(err)
18 }
19
20 defer func() {
21 if err = client.Disconnect(context.TODO()); err != nil {
22 panic(err)
23 }
24 }()
25
26 // database and colletion code goes here
27 db := client.Database("sample_guides")
28 coll := db.Collection("planets")
29
30 // find code goes here
31 filter := bson.D{{"hasRings", true}}
32 cursor, err := coll.Find(context.TODO(), filter)
33 if err != nil {
34 panic(err)
35 }
36
37 // iterate code goes here
38 for cursor.Next(context.TODO()) {
39 var result bson.M
40 if err := cursor.Decode(&result); err != nil {
41 panic(err)
42 }
43 fmt.Println(result)
44 }
45 if err := cursor.Err(); err != nil {
46 panic(err)
47 }
48
49}
map[... hasRings:true name:Uranus ... ]]
map[... hasRings:true name:Neptune ... ]]
map[... hasRings:true name:Jupiter ... ]]
map[... hasRings:true name:Saturn ... ]]

Here is the complete code followed by sample output.

CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 // database and collection code goes here
12 MongoDatabase db = mongoClient.getDatabase("sample_guides");
13 MongoCollection<Document> coll = db.getCollection("planets");
14
15 // find code goes here
16 Bson filter = eq("hasRings", true);
17 MongoCursor<Document> cursor = coll.find(filter).iterator();
18
19 // iterate code goes here
20 try {
21 while (cursor.hasNext()) {
22 System.out.println(cursor.next().toJson());
23 }
24 } finally {
25 cursor.close();
26 }
27 }
28 }
29}
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

Here is the complete code followed by sample output.

crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 // database and collection code goes here
10 const db = client.db("sample_guides");
11 const coll = db.collection("planets");
12
13 // find code goes here
14 const cursor = coll.find({ hasRings: true });
15
16 // iterate code goes here
17 await cursor.forEach(console.log);
18 } finally {
19 // Ensures that the client will close when you finish/error
20 await client.close();
21 }
22}
23run().catch(console.dir);
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

Here is the complete code followed by sample output.

crud_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7
8# database and collection code goes here
9db = client.sample_guides
10coll = db.planets
11# find code goes here
12cursor = coll.find({"hasRings": True})
13# iterate code goes here
14for doc in cursor:
15 print(doc)
16
17# Close the connection to MongoDB when you're done.
18client.close()
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }
6

You can also query the collection using multiple criteria. The following example illustrates using multiple criteria to retrieve documents from the planets collection that have a hasRings field with a value of false and Argon(Ar) as an entry in the mainAtmosphere field.

Here is the complete code followed by sample output.

CrudRead.cs
1// find code goes here
2var cursor = from planet in coll.AsQueryable()
3 where planet["hasRings"] == false
4 where planet["mainAtmosphere"] == "Ar"
5 select planet;
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

Here is the complete code followed by sample output. The output documents have been truncated here for display purposes.

crudRead.go
1// find code goes here
2filter := bson.D{
3 {"$and",
4 bson.A{
5 bson.D{{"hasRings", false}},
6 bson.D{{"mainAtmosphere", "Ar"}},
7 },
8 },
9}
10cursor, err := coll.Find(context.TODO(), filter)
11if err != nil {
12 panic(err)
13}
map[... hasRings:false mainAtmosphere:[CO2 Ar N] ... ]]
map[... hasRings:false mainAtmosphere:[N O2 Ar] ... ]]

Here is the complete code followed by sample output.

CrudRead.java
1// find code goes here
2Bson filter = and(eq("hasRings", false), eq("mainAtmosphere", "Ar"));
3MongoCursor<Document> cursor = coll.find(filter).iterator();
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

Here is the complete code followed by sample output.

crud-read.js
1// find code goes here
2const cursor = coll.find({ hasRings: false, mainAtomsphere: "Ar" });
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }
crud_read.py
1# find code goes here
2cursor = coll.find({"hasRings": False, "mainAtmosphere": "Ar"})
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

Even though the mainAtmosphere field is an array, you can use a strict equality query because MongoDB treats arrays as first-class types. During execution of the query, MongoDB compared each entry in the array to the value you specified, in this case "Ar", to determine if the documents matched your criteria.

If you have completed this guide, you have retrieved data from MongoDB using specific equality criteria. This is useful when you know exactly what you're searching for, for example an item number, a username, or chemical element.

In the next guide, you'll learn how to read data from MongoDB using comparison operators to retrieve documents that match a broader set of criteria.

See the following resources for more in-depth information about the concepts presented here:

What's Next
Read Data using Operators and Compound Queries
20 mins

Use operators and compound queries to retrieve documents in MongoDB.

Start Guide
Chapter 2
CRUD
  • Add a MongoDB Driver
  • Read Data in MongoDB
  • Read Data from MongoDB With Queries
  • Read Data using Operators and Compound Queries
  • Insert Data into MongoDB
  • Update Data in MongoDB
  • Delete Data from MongoDB