MongoDb - Logical Query Operator - $and & $not
Logical Operator
The MongoDB $and operator performs a logical AND operation on an array of two or more expressions and retrieve the documents which satisfy all the expressions in the array. The $and operator uses short-circuit evaluation. If the first expression (e.g. <expression1>) evaluates to false, MongoDB will not evaluate the remaining expressions.
Syntax
{ $and: [ { <exp1> }, { <exp2> } , ... , { <expN> } ] }
Our database name is 'myinfo' and our collection name is 'student'. Here, is the collection bellow.
Sample collection "student"
[ { "f_name" : "Zenny", "sex" : "Female", "class" : "VI", "age" : 12, "grd_point" : 32.6342 }, { "f_name" : "Paul", "sex" : "Male", "class" : "VII", "age" : 13, "grd_point" : 29.5904 }, { "f_name" : "Tom", "sex" : "Male", "class" : "VI", "age" : 11, "grd_point" : 30.1257 }, { "f_name" : "Lassy", "sex" : "Female", "class" : "VIII", "age" : 13, "grd_point" : 28.2514 }, { "f_name" : "Peter", "sex" : "Male", "class" : "VI", "age" : 11, "grd_point" : 31.5201 } ]
Example of MongoDB Logical Operator - $and
If we want to select all documents from the collection "student" which satisfying the condition -
1. sex of student is Female and
2. class of the student is VI and
3. grd_point of the student is greater than equal to 31
the following mongodb command can be used :
>db.student.find({$and:[{"sex":"Male"},{"grd_point":{ $gte: 31 }},{"class":"VI"}]}).pretty();
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 student WHERE sex="Male" AND grd_point>=31 AND class="VI";
Output
{ "_id" : ObjectId("527b3cc65ceafed9b2254a98"), "f_name" : "Peter", "sex" : "Male", "class" : "VI", "age" : 11, "grd_point" : 31.5201 }
The above AND operation can be written inplicitly in such a manner, by specifying a comma separated list of expressions. Here is the example below:
db.student.find({"sex":"Male","grd_point":{ $gte: 31},"class":"VI"}).pretty();
Logical Operator - $not
The MongoDB $not operator performs a logical NOT operation on the given expression and fetches selected documents that do not match the expression and the document that do not contain the field as well, specified in the expression.
Syntax
{ field: { $not: { <expression> } } }
Example of MongoDB Logical Operator - $not
If we want to select all documents from the collection "student" which satisfying the condition -
age of student is at least 12
the following mongodb command can be used :
>db.student.find( {"age": { $not: {$lt : 12}}}).pretty();
SQL equivalent command is
SELECT * FROM student WHERE age>=12;
Output
{ "_id" : ObjectId("527b3cc65ceafed9b2254a94"), "f_name" : "Zenny", "sex" : "Female", "class" : "VI", "age" : 12, "grd_point" : 32.6342 } { "_id" : ObjectId("527b3cc65ceafed9b2254a95"), "f_name" : "Paul", "sex" : "Male", "class" : "VII", "age" : 13, "grd_point" : 29.5904 } { "_id" : ObjectId("527b3cc65ceafed9b2254a97"), "f_name" : "Lassy", "sex" : "Female", "class" : "VIII", "age" : 13, "grd_point" : 28.2514 }
Example of MongoDB Logical Operator - $not with pattern matching
If we want to select all documents from the collection "student" which satisfying the condition -
sex of student must not Male.
the following mongodb command can be used :
>db.student.find( {"sex": { $not: /^M.*/}}).pretty();
SQL equivalent command is
SELECT * FROM student WHERE sex NOT LIKE 'M%';
Output
{ "_id" : ObjectId("527b3cc65ceafed9b2254a94"), "f_name" : "Zenny", "sex" : "Female", "class" : "VI", "age" : 12, "grd_point" : 32.6342 } { "_id" : ObjectId("527b3cc65ceafed9b2254a97"), "f_name" : "Lassy", "sex" : "Female", "class" : "VIII", "age" : 13, "grd_point" : 28.2514 }
? Source: http://www.w3resource.com/mongodb/mongodb-logical-and-not-operators.php