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 elementsProjection
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",
}]