MongoDb - Logical Query Operator - $or & $nor
Description
In this page we are going to discuss about the logical operator $or and $nor.
The $or operator is used to search multiple expression in a single query with only one matching criterion to be needed in a document. More than one keys and values can be used with the $or operator.
The $nor operator is used to search multiple expression in a single query which does not match any of the values specified with the $nor.
Our database name is 'myinfo' and our collection name is 'testtable'. Here, is the collection bellow.
Sample collection "testtable"
{
"_id" : ObjectId("528f4e630fe5e6467e58ae7b"),
"user_id" : "user1",
"password" : "1a2b3c",
"sex" : "Male",
"age" : 17,
"date_of_join" : "16/10/2010",
"education" : "M.C.A.",
"profession" : "CONSULTANT",
"interest" : "MUSIC",
"extra" : {
"community_name" : [
"MODERN MUSIC",
"CLASSICAL MUSIC",
"WESTERN MUSIC"
],
"community_moder_id" : [
"MR. Alex",
"MR. Dang",
"MR Haris"
],
"community_members" : [
700,
200,
1500
],
"friends" : {
"valued_friends_id" : [
"kumar",
"harry",
"anand"
],
"ban_friends_id" : [
"Amir",
"Raja",
"mont"
]
}
}
}
{
"_id" : ObjectId("528f4e720fe5e6467e58ae7c"),
"user_id" : "user2",
"password" : "11aa1a",
"sex" : "Male",
"age" : 24,
"date_of_join" : "17/10/2009",
"education" : "M.B.A.",
"profession" : "MARKETING",
"interest" : " MUSIC",
"extra" : {
"community_name" : [
"MODERN MUSIC",
"CLASSICAL MUSIC",
"WESTERN MUSIC"
],
"co mmunity_moder_id" : [
"MR. Roy",
"MR. Das",
"MR Doglus"
],
"community_members" : [
500,
300,
1400
],
"friends" : {
"valued_friends_id" : [
"pal",
"viki",
"john"
],
"ban_friends_id" : [
"jalan",
"mono j",
"evan"
]
}
}
}
{
"_id" : ObjectId("528f4e7e0fe5e6467e58ae7d"),
"user_id" : "user3",
"password" : "b1c1d1",
"sex" : "Female",
"age" : 19,
"date_of_join" : "16/10/2010",
"education" : "M.C.A.",
"profession" : "IT COR.",
"interest" : "AR T",
"extra" : {
"community_name" : [
"MODERN ART",
"CLASSICAL ART",
"WESTERN ART"
],
"community_mo der_id" : [
"MR. Rifel",
"MR. Sarma",
"MR Bhatia"
],
"community_members" : [
5000,
2000,
1500
],
"friends" : {
"valued_friends_id" : [
"philip",
"anant",
"alan"
],
"ban_friends_id" : [
"Amir",
"Raja",
"mont"
]
}
}
}
{
"_id" : ObjectId("528f4e910fe5e6467e58ae7e"),
"user_id" : "user4",
"password" : "abczyx",
"sex" : "Female",
"age" : 22,
"date_of_join" : "17/8/2009",
"education" : "M.B.B.S.",
"profession" : "DOCTOR",
"interest" : "SPORTS",
"extra" : {
"community_name" : [
"ATHELATIC",
"GAMES FAN GYES",
"FAVOURIT GAMES"
],
"community_moder_id" : [
"MR. Paul",
"MR. Das",
"MR Doglus"
],
"community_members" : [
2500,
2200,
3500
],
"friends" : {
"valued_friends_id" : [
"vinod",
"viki",
"john"
],
"ban_friends_id" : [
"jalan",
"monoj",
"evan"
]
}
}
}
Document written in command prompt
MongoDB conditional operator - $or example
If we want to fetch documents from the collection "testtable" which containing the value of "age " either 19 or 22 or 23, the following mongodb command can be used :
>db.testtable.find({$or : [{"age" : 19},{"age" : 22},{"age":23}]})
N.B. find() method displays the documents in a non structured format but to display the results in a formatted way, the pretty() method can be used.
Sql equivalent command is
SELECT *
FROM testtable
WHERE age=19 OR age=22 OR age=23;
Output of the command
{
"_id" : ObjectId("528f35450fe5e6467e58ae79"),
"user_id" : "user3",
"password" : "b1c1d1",
"sex" : "Female",
"age" : 19,
"date_of_join" : "16/10/2010",
"education" : "M.C.A.",
"profession" : "IT COR.",
"interest" : "AR T",
"extra" : {
"community_name" : [
"MODERN ART",
"CLASSICAL ART",
"WESTERN ART"
],
"community_mo der_id" : [
"MR. Rifel",
"MR. Sarma",
"MR Bhatia"
],
"community_members" : [
5000,
2000,
1500
],
"friends" : {
"valued_friends_id" : [
"philip",
"anant",
"alan"
],
"ban_friends_id" : [
"Amir",
"Raja",
"mont"
]
}
}
}
{
"_id" : ObjectId("528f35860fe5e6467e58ae7a"),
"user_id" : "user4",
"password" : "abczyx",
"sex" : "Female",
"age" : 22,
"date_of_join" : "17/8/2009",
"education" : "M.B.B.S.",
"profession" : "DOCTOR",
"interest" : "SPORTS",
"extra" : {
"community_name" : [
"ATHELATIC",
"GAMES FAN GYES",
"FAVOURIT GAMES"
],
"community_moder_id" : [
"MR. Paul",
"MR. Das",
"MR Doglus"
],
"community_members" : [
2500,
2200,
3500
],
"friends" : {
"valued_friends_id" : [
"vinod",
"viki",
"john"
],
"ban_friends_id" : [
"jalan",
"monoj",
"evan"
]
}
}
}
Document written in command prompt
MongoDB $or operator with another field
If we want to fetch documents from the collection "testtable" which containing the value of "date_of_join" is "16/10/2010" and the value of "age " either 19 or 22 or 23, the following mongodb command can be used :
>db.testtable.find( { "date_of_join" : "16/10/2010" , $or : [{"age" : 19},{"age" : 22},{"age":23}] } )
N.B. find() method displays the documents in a non structured format but to display the results in a formatted way, the pretty() method can be used.
Output of the command
{
"_id" : ObjectId("528f35450fe5e6467e58ae79"),
"user_id" : "user3",
"password" : "b1c1d1",
"sex" : "Female",
"age" : 19,
"date_of_join" : "16/10/2010",
"education" : "M.C.A.",
"profession" : "IT COR.",
"interest" : "AR T",
"extra" : {
"community_name" : [
"MODERN ART",
"CLASSICAL ART",
"WESTERN ART"
],
"community_mo der_id" : [
"MR. Rifel&q