Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Query MongoDB for a nested search
To perform nested searches in MongoDB, use the $and operator combined with $or to create complex query conditions. This allows you to match documents that satisfy multiple criteria with optional alternative conditions.
Syntax
db.collection.find({
$and: [
{ field1: "value1" },
{ field2: "value2" },
{ $or: [
{ field3: "option1" },
{ field4: "option2" }
]}
]
});
Sample Data
db.demo12.insertMany([
{"Name": "Chris", "Age": 23, "CountryName": "US", "Message": "Hello"},
{"Name": "David", "Age": 21, "CountryName": "US", "Message": "Hello"},
{"Name": "Bob", "Age": 23, "CountryName": "AUS", "Message": "Hi"},
{"Name": "Carol", "Age": 24, "CountryName": "US", "Message": "Hi"}
]);
Display All Documents
db.demo12.find();
{ "_id" : ObjectId("5e0f70a2d7df943a7cec4fa2"), "Name" : "Chris", "Age" : 23, "CountryName" : "US", "Message" : "Hello" }
{ "_id" : ObjectId("5e0f70acd7df943a7cec4fa3"), "Name" : "David", "Age" : 21, "CountryName" : "US", "Message" : "Hello" }
{ "_id" : ObjectId("5e0f70bad7df943a7cec4fa4"), "Name" : "Bob", "Age" : 23, "CountryName" : "AUS", "Message" : "Hi" }
{ "_id" : ObjectId("5e0f70c7d7df943a7cec4fa5"), "Name" : "Carol", "Age" : 24, "CountryName" : "US", "Message" : "Hi" }
Example: Nested Search Query
Find documents where Name is "Bob" AND Age is 23 AND (CountryName is "UK" OR Message is "Hi") ?
db.demo12.find({
$and: [
{ Name: "Bob" },
{ Age: 23 },
{ $or: [
{ CountryName: "UK" },
{ Message: "Hi" }
]}
]
});
{ "_id" : ObjectId("5e0f70bad7df943a7cec4fa4"), "Name" : "Bob", "Age" : 23, "CountryName" : "AUS", "Message" : "Hi" }
How It Works
The query matches documents that satisfy all conditions in $and. Since Bob's document has Name="Bob", Age=23, and Message="Hi" (which matches one condition in $or), it gets returned even though CountryName is "AUS" not "UK".
Conclusion
Nested searches using $and and $or operators enable complex conditional queries. The $and requires all conditions to be true, while $or requires at least one alternative condition to match.
