Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Specify Fields to Return

In this guide, you can learn how to use the Rust driver to specify which fields to return from a read operation by using a projection. A projection is a document that specifies which fields MongoDB returns from a query.

The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your Rust application, create a Client that connects to an Atlas cluster and assign the following values to your database and collection variables:

let database = client.database("sample_restaurants");
let collection: Collection<Document> = database.collection("restaurants");

To learn how to create a free MongoDB Atlas cluster and load the sample datasets, see the MongoDB Get Started guide.

Use a projection to specify which fields to include or exclude in a returned document. You cannot combine inclusion and exclusion statements in a single projection, unless you exclude the _id field.

To include specific fields in a read operation result, specify the projection() method on the result of a find() method call. Pass a document to the projection() method that specifies the fields to include by using the following syntax. Specify a value of 1 to include a field in the returned document and a value of 0 to exclude a field.

.projection(doc! {
"<field_name>": 1, // Includes the field in the returned document
"_id": 0 // Excludes the _id field from the returned document
})

The following example uses the find() method to find all restaurants in which the name field value is "Emerald Pub". The code then calls the projection() method to return only the name, cuisine, and borough fields of matching documents.

Select the Asynchronous or Synchronous tab to see the corresponding code for each runtime:

let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection
.find(filter)
.projection(doc! { "name": 1, "cuisine": 1, "borough": 1 })
.await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")})
Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection
.find(filter)
.projection(doc! { "name": 1, "cuisine": 1, "borough": 1 })
.run()?;
for result in cursor {
println!("{:?}", result?);
}
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")})
Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})

When using a projection to specify fields to include in the return document, the _id field is also included by default. All other fields are implicitly excluded. To remove the _id field from the return document, explicitly exclude it.

When specifying fields to include, you can also exclude the _id field from the returned document.

The following example performs the same query as the preceding example but excludes the _id field from the projection. Select the Asynchronous or Synchronous tab to see the corresponding code for each runtime:

let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection.find(filter)
.projection(doc! { "name": 1, "cuisine": 1, "borough": 1, "_id": 0 })
.await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Document({"borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")})
Document({"borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})
let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection.find(filter)
.projection(doc! { "name": 1, "cuisine": 1, "borough": 1, "_id": 0 })
.run()?;
for result in cursor {
println!("{:?}", result?);
}
Document({"borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub")})
Document({"borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub")})

To exclude specific fields from a read operation result, specify the projection() method on the result of a find() method call. Pass a document to the projection() method that specifies the fields to exclude by using the following syntax:

.projection(doc! { "<field_name>": 0 })

The following example uses the find() method to find all restaurants in which the name field value is "Emerald Pub". The code then calls the projection() method to omit the grades and address fields from the result. Select the Asynchronous or Synchronous tab to see the corresponding code for each runtime:

let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection.find(filter)
.projection(doc! { "grades": 0, "address": 0 })
.await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40367329")})
Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40668598")})
let filter = doc! { "name": "Emerald Pub" };
let mut cursor = collection.find(filter)
.projection(doc! { "grades": 0, "address": 0 })
.run()?;
for result in cursor {
println!("{:?}", result?);
}
Document({"_id": ObjectId("..."), "borough": String("Manhattan"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40367329")})
Document({"_id": ObjectId("..."), "borough": String("Queens"), "cuisine": String("American"), "name": String("Emerald Pub"), "restaurant_id": String("40668598")})

When using a projection to specify which fields to exclude, any unspecified fields are implicitly included in the return document.

To learn more about projections, see the Project Fields guide in the MongoDB Server manual.

To learn more about the find() method, see the find() API documentation.

Back

Specify Documents to Return

On this page