MongoDB: Find Documents in Collection using find()
In MongoDB, a collection represents a table in RDBMS and a document is like a record in a table. Here you will learn how to retrieve or find one or more documents from a collection.
MongoDB provides two methods for finding documents from a collection:
- findOne() - returns a the first document that matched with the specified criteria.
- find() - returns a cursor to the selected documents that matched with the specified criteria.
The following inserts documents in the employees
collection.
db.employees.insertMany([
{
_id:1,
firstName: "John",
lastName: "King",
email: "[email protected]",
salary: 5000,
skills: [ "Angular", "React", "MongoDB" ],
department: {
"name":"IT"
}
},
{
_id:2,
firstName: "Sachin",
lastName: "T",
email: "[email protected]",
salary: 8000,
skills: [ "Accounting", "Tax" ],
department: {
"name":"Finance"
}
},
{
_id:3,
firstName: "James",
lastName: "Bond",
email: "[email protected]",
salary: 7500,
skills: [ "Sales", "Marketing" ],
department: {
"name":"Marketing"
}
},
{
_id:4,
firstName: "Steve",
lastName: "J",
email: "[email protected]",
salary: 7000
},
{
_id:5,
firstName: "Kapil",
lastName: "D",
email: "[email protected]",
salary: 4500,
skills: [ "Accounting", "Tax" ],
department: {
"name":"Finance"
}
},
{
_id:6,
firstName: "Amitabh",
lastName: "B",
email: "[email protected]",
salary: 7000
}
])
Find Documents using the find() Method
The find()
method finds all the documents that matches with the specified criteria and returns the cursor object. The cursor object is a pointer to the result set.
Syntax:
db.collection.find(query, projection)
Parameters:
- query: Optional. Specifies the criteria using query operators.
- projection: Optional. Specifies the fields to include in a resulted document.
The find()
returns all the documents from a collection if no parameter is passed. The following executes the db.employees.find()
in mongosh shell:
humanResourceDB> db.employees.find() [ { _id:1, firstName: "John", lastName: "King", email: "[email protected]", salary: 5000, skills: [ "Angular", "React", "MongoDB" ], department: { "name":"IT" } }, { _id:2, firstName: "Sachin", lastName: "T", email: "[email protected]", salary: 8000, skills: [ "Accounting", "Tax" ], department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", email: "[email protected]", salary: 7500, skills: [ "Sales", "Marketing" ], department: { "name":"Marketing" } }, { _id:4, firstName: "Steve", lastName: "J", email: "[email protected]", salary: 7000 }, { _id:5, firstName: "Kapil", lastName: "D", email: "[email protected]", salary: 4500, skills: [ "Accounting", "Tax" ], department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", email: "[email protected]", salary: 7000 } ]
Executing db.collection.find()
in mongosh shell automatically iterates the cursor to display up to the first 20 documents. Type it
to continue iteration.
You can specify the criteria as { field: "value", field:"value",..}
on which you want to find a document. For example, the following returns all the documents where salary
is 7000.
db.employees.find({salary: 7000})
[{
_id:4,
firstName: "Steve",
lastName: "J",
email: "[email protected]",
salary: 7000
},
{
_id:6,
firstName: "Amitabh",
lastName: "B",
email: "[email protected]",
salary: 7000
}
]
The find()
method performs the case-sensitive search, so {firstName: "Kapil"}
and {firstName: "kapil"}
returns different result.
Use the query operators for more refined search. For example, the following finds the first document where salary is greater than 8000.
db.employees.find({salary: {$gt: 7000}})
[{
_id: 2,
firstName: 'Sachin',
lastName: 'T',
email: '[email protected]',
salary: 8000,
skills: [ 'Accounting', 'Tax' ],
department: { name: 'Finance' }
},
{
_id: 3,
firstName: 'James',
lastName: 'Bond',
email: '[email protected]',
salary: 7500,
skills: [ 'Sales', 'Marketing' ],
department: { name: 'Marketing' }
}]
Specify multiple criteria by adding another query operator as field. The following retrieves documents whose salary
field is greater than 7000 and less than 8000.
db.employees.find({salary: {$gt: 7000, $lt: 8000}})
[{
_id: 3,
firstName: 'James',
lastName: 'Bond',
email: '[email protected]',
salary: 7500,
skills: [ 'Sales', 'Marketing' ],
department: { name: 'Marketing' }
}]
Query Embedded Document
You can specify criteria for embedded document fields using dot notation, as shown below.
db.employees.find({ "department.name": "Finance"})
[
{
_id: 2,
firstName: 'Sachin',
lastName: 'T',
email: '[email protected]',
salary: 8000,
skills: [ 'Accounting', 'Tax' ],
department: { name: 'Finance' }
},
{
_id: 5,
firstName: 'Kapil',
lastName: 'D',
email: '[email protected]',
salary: 4500,
skills: [ 'Accounting', 'Tax' ],
department: { name: 'Finance' }
}
]
Query Array Elements
You can find documents based on the array element, index, or size.
db.employees.find({ "skills": "Tax"}) //returns documents where skills contains "Tax"
db.employees.find({ "skills": { $in: [ "Tax", "Sales" ]}}) //returns documents where skills contains "Tax" or "Sales"
db.employees.find({ "skills": { $all: [ "Tax", "Accounting" ]}}) //returns documents where skills contains "Tax" and "Accounting"
db.employees.find({ "skills": { $size: 3}) //returns documents where skills contains 3 elements
Projection
Use the projection parameter to specify the fields to be included in the result. The projection parameter format is {<field>: <1 or true>, <field>: <1 or true>...}
where 1 or true includes the field, and o or false excludes the field in the result.
db.employees.find({salary: 7000}, {firstName:1, lastName:1})
[{
_id:4,
firstName: "Steve",
lastName: "J",
},
{
_id:6,
firstName: "Amitabh",
lastName: "B",
}]
Note that by default, the _id
field will be included in the result. To omit it, specify { _id:0 }
in the projection.
db.employees.findOne({firstName: "Sachin"}, {_id: 0, firstName:1, lastName:1})
[{
firstName: "Steve",
lastName: "J",
},
{
firstName: "Amitabh",
lastName: "B",
}]