In this tutorial, I will cover the $and operator in MongoDB. So, the $and operator performs an AND operation on the given array of expressions. It eventually selects ALL the documents that matched the query.
This guide aims to provide readers with a detailed walkthrough on different kinds of examples on how to use the $and operator. Let us get this detailed guide started.
Also read: Distinct Aggregation in MongoDB – An Easy Guide
The $and Operator Syntax in MongoDB
Let us take a quick look at the $and operator syntax in MongoDB:
{ $and: [ { expression1 }, { expression2 } , ... , { expressionN } ] }
Make sure you separate each expression with commas.
Using the $and Operator in MongoDB
Let us start with the examples of using the $and operator in different scenarios.
Below is the collection I would prefer to use for this tutorial:
> db.drones.find().pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0c"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Nimbari Gryphon Medeta 65",
"price" : 77500,
"weight" : "77 kilograms",
"additionalDetails" : {
"material" : "carbon fiber",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Cinematography"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0d"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "X-Strimmer Eye",
"price" : 23500,
"weight" : "24 kilograms",
"additionalDetails" : {
"material" : "glass fiber",
"moreUses" : [
"Precision Agriculture",
"Cinematography"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0e"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Khai Balemosh Shefqa TRX",
"price" : 120500,
"weight" : "80 kilograms",
"additionalDetails" : {
"material" : "aluminum",
"moreUses" : [
"Precision Agriculture",
"Land Inspection"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0f"),
"utility" : [
"Natural Resource Exploration",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Sifinist Croma AX",
"price" : 99500,
"weight" : "97 kilograms",
"additionalDetails" : {
"material" : "lithium",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf10"),
"utility" : [
"Remote sensing",
"Real estate and construction",
"Recreation"
],
"onSale" : false,
"name" : "Drovce Finnifield FR-7",
"price" : 87600,
"weight" : "13 kilograms",
"additionalDetails" : {
"material" : "polysterene",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
Operating on the Same Field Using the $and Operator
In this example, I will operate using the $and operator on one and the same field for a query.
Let’s say I want to select all those documents that have a price less than 90000 and are not equal to 77500:
> db.drones.find( { $and: [ { price: { $lt: 90000 } }, { price: { $ne: 77500 } } ] } ).pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0d"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "X-Strimmer Eye",
"price" : 23500,
"weight" : "24 kilograms",
"additionalDetails" : {
"material" : "glass fiber",
"moreUses" : [
"Precision Agriculture",
"Cinematography"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf10"),
"utility" : [
"Remote sensing",
"Real estate and construction",
"Recreation"
],
"onSale" : false,
"name" : "Drovce Finnifield FR-7",
"price" : 87600,
"weight" : "13 kilograms",
"additionalDetails" : {
"material" : "polysterene",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
Perfect! We found 2 such documents.
Operating on Multiple Fields Using the $and Operator
In this example, I will operate on multiple fields this time.
Let’s say I want to select all those documents that have a price greater than 95000 and are not on sale:
> db.drones.find( { $and: [ { onSale: { $eq: false} }, { price: { $gte: 95000 } } ] } ).pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0e"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Khai Balemosh Shefqa TRX",
"price" : 120500,
"weight" : "80 kilograms",
"additionalDetails" : {
"material" : "aluminum",
"moreUses" : [
"Precision Agriculture",
"Land Inspection"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0f"),
"utility" : [
"Natural Resource Exploration",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Sifinist Croma AX",
"price" : 99500,
"weight" : "97 kilograms",
"additionalDetails" : {
"material" : "lithium",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
We have again received 2 such documents.
Operating on an Array Field Using the $and in MongoDB
In this example, I will operate on an array field using the $and operator in MongoDB. I want all the documents that are not on sale and have the given utility field value:
> db.drones.find( { $and: [ { onSale: { $eq: false} }, { "utility": { $eq: [ "Remote sensing",
... "Real estate and construction",
... "Recreation" ] } } ] } ).pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf10"),
"utility" : [
"Remote sensing",
"Real estate and construction",
"Recreation"
],
"onSale" : false,
"name" : "Drovce Finnifield FR-7",
"price" : 87600,
"weight" : "13 kilograms",
"additionalDetails" : {
"material" : "polysterene",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
Looks like we just have 1 such matching document.
Operating on an Embedded Document Using the $and Operator
In this example, I will operate on an embedded document.
I now want all those documents that have greater than or equal to 88000 and if the material is “aluminum”. The material field is an embedded document of the additionalDetails field.
> db.drones.find( { $and: [ { price: { $gte: 88000 } }, { "additionalDetails.material": { $eq: "aluminum" } } ] } ).pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0e"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Khai Balemosh Shefqa TRX",
"price" : 120500,
"weight" : "80 kilograms",
"additionalDetails" : {
"material" : "aluminum",
"moreUses" : [
"Precision Agriculture",
"Land Inspection"
]
}
}
We found 1 document for this query.
Operating on an Embedded Array Field Using the $and Operator
In this example, I will be operating on the nested array field of our collection. I am finding those documents that have a price greater than or equal to 85000 and if the given array exists in any of those:
> db.drones.find( { $and: [ { price: { $gte: 85000 } }, { "additionalDetails.moreUses": { $exists: ["Videography", "Precision Agriculture", "Recreation"] } } ] } ).pretty()
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0e"),
"utility" : [
"Natural Resource Exploration",
"Remote sensing",
"Real estate and construction",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Khai Balemosh Shefqa TRX",
"price" : 120500,
"weight" : "80 kilograms",
"additionalDetails" : {
"material" : "aluminum",
"moreUses" : [
"Precision Agriculture",
"Land Inspection"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf0f"),
"utility" : [
"Natural Resource Exploration",
"Recreation",
"Delivery"
],
"onSale" : false,
"name" : "Sifinist Croma AX",
"price" : 99500,
"weight" : "97 kilograms",
"additionalDetails" : {
"material" : "lithium",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
{
"_id" : ObjectId("61673f46b34f185eb7b2bf10"),
"utility" : [
"Remote sensing",
"Real estate and construction",
"Recreation"
],
"onSale" : false,
"name" : "Drovce Finnifield FR-7",
"price" : 87600,
"weight" : "13 kilograms",
"additionalDetails" : {
"material" : "polysterene",
"moreUses" : [
"Precision Agriculture",
"Land Inspection",
"Water Inspection",
"Videography"
]
}
}
We found 3 matching documents!
Conclusion
Learn to use the $and operator in MongoDB with these examples.
References
https://docs.mongodb.com/manual/reference/operator/query/and/