In this descriptive post, we have provided an insight into the usage of $where operator in context of MongoDB.
How does $where work in MongoDB
It is noticed that the $where operator is used rarely as compared to other standard operators of MongoDB like $gt, $lt, $in, and $nin.
As mentioned earlier, the $where operator works for only JS-based strings or its functions only and the syntax to use $where operator is mentioned below:
It is observed that $where operator cannot be executed with few standard functions of MongoDB like db. The $where operator, along with map-reduce operations in MongoDB, support several JavaScript functions, and thus they cannot be used globally
How to use $where in MongoDB
The following instances of MongoDB are used in this guide:
Database: The database used here is named “Linuxhint“.
Collection-name: The collection that is exercised in this article is named “grades“.
And the documents contained by “grades” collection are shown below:
Note: C1, C2, C3, C4 are assumed as courses id’s in the above output.
Example 1: Basic use of $where operator
Before getting into details, you must remember that the two keywords, either “this” or “obj” are used to refer to documents in JS function or JS expression.
Referring to the documents in the “grades” collection:
Command 1: The command written below will search for documents and will display only those that have the same values in different fields:
As you can check that the output contains only “one” document where values of “C1” and “C2” match.
Command 2: The same output(as in Command 1) can be achieved by issuing the below stated command in Mongo Shell. Here, the “obj‘ keyword is used instead of “this“.
Command 3: You can also use the $where operator as we have performed in the command below. In the following command, a function() will return the documents obtained by applying “obj” and “this” keyword, the value of “C1” and “C3” matches.
Command 4: The application of JS function() with $where operator can also be achieved by using the “obj” keyword instead of “this“. For this, you can execute the following command:
Example 2: $where acts without using it in command
If your command only performs the application of the $where operator, then you can use the command without specifying the $where keyword in the command. The example command in a situation like these is stated below:
Or the “obj” keyword can also be used instead of “this” in the above command.
Example 3: Using $where with standard MongoDB operators
The $where operator can be used with several other operators of MongoDB. For example, in the below mentioned command, we have used less than(<) operator with $where operator. The command written below will look for conditions of both operators and then any document satisfying either “==” or “||”condition will be displayed in the output.
It is observed from working with the $where operator that is searching inside the bulk of documents may become time-consuming with the $where operator because MongoDB executes $where operator after any other standard operator used in the query.
Conclusion
MongoDB frequently updated its versions in the past, and the reason was to improve the performance and efficacy of any MongoDB command or method, or operator. In MongoDB, the $where the operator can be used to match the fields using JS expression or JS function. In this detailed guide, we have provided the usage of the $where operator in MongoDB. After detailed research and data collection, we came to the point that the alternatives of $where the operator should be preferred, as the $where operator searches for the whole collection before giving you the output.