MongoDB Tutorial

  • Home
  • Getting Started
  • CRUD
  • Indexes
Home / MongoDB CRUD / MongoDB Projection

MongoDB Projection

Summary: in this tutorial, you’ll how to use the MongoDB projection that allows you to select fields to return from a query

Introduction to the MongoDB projection

In MongoDB, projection simply means selecting fields to return from a query.

By default, the find() and findOne() methods return all fields in matching documents. Most of the time you don’t need data from all the fields.

To select fields to return from a query, you can specify them in a document and pass the document to the find() and findOne() methods. This document is called a projection document.

To determine if a field is included in the returned documents, you use the following syntax:

{ <field>: value, ...}

If the value is 1 or true, the <field> is included in the matching documents. In case the value is 0 or false, it is suppressed from the returned documents.

If the projection document is empty {}, all the available fields will be included in the returned documents.

To specify a field in an embedded document, you use the following dot notation:

{ "<embeddedDocument>.<field>": value, ... }

Similarly, to include a <field> from an embedded document located in an array, you use the following dot notation syntax:

{ "<arrayField>.field": value, ...}

MongoDB projection examples

We’ll use the following products collection for the projection examples.

db.products.insertMany([ { "_id" : 1, "name" : "xPhone", "price" : 799, "releaseDate": ISODate("2011-05-14"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 },"color":["white","black"],"storage":[64,128,256],"inventory":[{ qty: 1200,"warehouse": "San Jose"}]}, { "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate": ISODate("2011-09-01") , "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 },"color":["white","black","purple"],"storage":[128,256,512],"inventory":[{ qty: 300,"warehouse": "San Francisco"}]}, { "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate": ISODate("2015-01-14"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 },"color":["blue"],"storage":[16,64,128],"inventory":[{ qty: 400,"warehouse": "San Jose"},{ qty: 200,"warehouse": "San Francisco"}]}, { "_id" : 4, "name" : "SmartPad", "price" : 699, "releaseDate": ISODate("2020-05-14"),"spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256,1024],"inventory":[{ qty: 1200,"warehouse": "San Mateo"}]}, { "_id" : 5, "name" : "SmartPhone", "price" : 599,"releaseDate": ISODate("2022-09-14"), "spec" : { "ram" : 4, "screen" : 5.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256]} ])

1) Returning all fields in matching documents

If you don’t specify the projection document, the find() method will include all fields in the matching documents.

For example, the following query returns all fields from all documents in the products collection where the price is 899:

db.products.find({price: 899});

Output:

{ "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate" : ISODate("2011-09-01T00:00:00Z"), "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 }, "color" : [ "white", "black", "purple" ], "storage" : [ 128, 256, 512 ], "inventory" : [ { "qty" : 300, "warehouse" : "San Francisco" } ] } { "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate" : ISODate("2015-01-14T00:00:00Z"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 }, "color" : [ "blue" ], "storage" : [ 16, 64, 128 ], "inventory" : [ { "qty" : 400, "warehouse" : "San Jose" }, { "qty" : 200, "warehouse" : "San Francisco" } ] }

2) Returning specified fields including the _id field

If you specify the fields in the projection document, the find() method will return only these fields including the _id field by default.

The following example returns all documents from the products collection. However, its result includes only the name, price, and _id field in the matching documents:

db.products.find({}, { name: 1, price: 1 });

Output:

{ "_id" : 1, "name" : "xPhone", "price" : 799 } { "_id" : 2, "name" : "xTablet", "price" : 899 } { "_id" : 3, "name" : "SmartTablet", "price" : 899 } { "_id" : 4, "name" : "SmartPad", "price" : 699 } { "_id" : 5, "name" : "SmartPhone", "price" : 599 }

To suppress the _id field, you need to explicitly specify it in the projection document like this:

db.products.find({}, { name: 1, price: 1 , _id: 0 });

Output:

{ "name" : "xPhone", "price" : 799 } { "name" : "xTablet", "price" : 899 } { "name" : "SmartTablet", "price" : 899 } { "name" : "SmartPad", "price" : 699 } { "name" : "SmartPhone", "price" : 599 }

3) Returning all fields except for some fields

If the number of fields to return is many, you can use the projection document to exclude other fields instead.

The following example returns all fields of the document _id 1 except for releaseDate, spec, and storage fields:

db.products.find({_id:1}, { releaseDate: 0, spec: 0, storage: 0 }).pretty()

Output:

{ "_id" : 1, "name" : "xPhone", "price" : 799, "color" : [ "white", "black" ], "inventory" : [ { "qty" : 1200, "warehouse" : "San Jose" } ] }

4) Returning fields in embedded documents

The following example returns the name, price, and _id fields of document _id 1. It also returns the screen field on the spec embedded document:

db.products.find({_id:1}, { name: 1, price: 1, "spec.screen": 1 }).pretty()

Output:

{ "_id" : 1, "name" : "xPhone", "price" : 799, "spec" : { "screen" : 6.5 } }

MongoDB 4.4 and later allows you to specify embedded fields using the nested form like this:

db.products.find({_id:1}, { name: 1, price: 1, spec : { screen: 1 } }).pretty()

5) Projecting fields on embedded documents in an array

The following example specifies a projection that returns:

  • the _id field (by default)
  • The name field
  • And qty field in the documents embedded in the inventory array.
db.products.find({}, { name: 1, "inventory.qty": 1 });

Output:

{ "_id" : 1, "name" : "xPhone", "inventory" : [ { "qty" : 1200 } ] } { "_id" : 2, "name" : "xTablet", "inventory" : [ { "qty" : 300 } ] } { "_id" : 3, "name" : "SmartTablet", "inventory" : [ { "qty" : 400 }, { "qty" : 200 } ] } { "_id" : 4, "name" : "SmartPad", "inventory" : [ { "qty" : 1200 } ] } { "_id" : 5, "name" : "SmartPhone" }

Summary

  • Use the {<field>: 1} to include the <field> in the matching documents and {<field>: 0} to exclude it.
  • Use the { <embeddedDocument>.<field>: 1} to include the <field> from the <embeddedDocument> in the matching document and { <embeddedDocument>.<field>: 0} to suppress it.
  • Use { <arrayField>.<field>: 1} to include the <field> from the embedded document in an array in the matching document and { <arrayField>.<field>: 0} to exclude it.

  • Was this tutorial helpful ?
  • YesNo
Previous MongoDB find
Next MongoDB $eq

Getting Started

  • What is MongoDB
  • Install MongoDB
  • MongoDB Basics
  • MongoDB Shell
  • MongoDB Data Types

Inserting Documents

  • insertOne
  • insertMany
  • mongoimport

Selecting Documents

  • findOne
  • find
  • Projection: Selecting Returned Fields

Comparison Query Operators

  • $eq: Equal To Operator
  • $lt: Less Than Operator
  • $lte: Less Than or Equal To Operator
  • $gt: Greater Than Operator
  • $gte: Greater Than or Equal To Operator
  • $ne: Not Equal To Operator
  • $in: In Operator
  • $nin: Not In Operator

Logical Query Operators

  • $and: Logical AND Opeartor
  • $or: Logical OR Operator
  • $not: Logical NOT Operator
  • $nor: Logical NOR Operator

Element Query Operators

  • $exists
  • $type

Array Query Operators

  • $size
  • $all
  • $elemMatch

Sorting & Limiting

  • sort(): Sorting documents
  • limit(): Limiting documents

Updating Documents

  • updateOne: Update one Document
  • updateMany: Update Multiple Documents
  • $inc: Increase / Decrease Field Value
  • $min: Update Field Value
  • $max: Update Field Value
  • $mul: Mutiply Field By a Number
  • $unset: Remove Fields
  • $rename: Rename Fields
  • Upsert

Deleting Documents

  • deleteOne
  • deleteMany

About MongoDBTutorial.com

This MongoDB Tutorial helps you master MongoDB quickly.

Recent Tutorials

  • MongoDB Indexes
  • MongoDB limit
  • MongoDB sort
  • MongoDB Upsert
  • MongoDB Projection

Site Links

  • Home
  • Contact
  • About
  • Privacy Policy

Copyright © 2021 ยท By mongodbtutorial.org. All Rights Reserved.