- Reference >
mongoShell Methods >- Database Methods >
- db.eval()
db.eval()¶
On this page
Definition¶
-
db.eval(function, arguments)¶ Provides the ability to run JavaScript code on the MongoDB server.
The helper
db.eval()in themongoshell wraps theevalcommand. Therefore, the helper method shares the characteristics and behavior of the underlying command with one exception:db.eval()method does not support thenolockoption.The method accepts the following parameters:
Parameter Type Description functionJavaScript function A JavaScript function to execute. argumentslist Optional. A list of arguments to pass to the JavaScript function. Omit if the function does not take arguments. The JavaScript function need not take any arguments, as in the first example, or may optionally take arguments as in the second:
Behavior¶
Write Lock¶
By default, db.eval() takes a global write lock while evaluating the
JavaScript function. As a result, db.eval() blocks all other read and
write operations to the database while the db.eval() operation runs.
To prevent the taking of the global write lock while evaluating the
JavaScript code, use the eval command with nolock set to
true. nolock does not impact whether the operations within the
JavaScript code take write locks.
For long running db.eval() operation, consider using either the
eval command with nolock: true or using other
server side code execution options.
Sharded Data¶
You can not use db.eval() with sharded collections.
In general, you should avoid using db.eval() in sharded clusters; nevertheless, it is possible to use db.eval() with
non-sharded collections and databases stored in a sharded
cluster.
Access Control¶
With authentication enabled, db.eval() will fail
during the operation if you do not have the permission to perform a
specified task.
Changed in version 2.4: You must have full admin access to run.
Examples¶
The following is an example of the db.eval() method:
- The
dbin the function refers to the current database. "eliot"is the argument passed to the function, and corresponds to thenameargument.5is an argument to the function and corresponds to theincAmountfield.
If you want to use the server’s interpreter, you must run
db.eval(). Otherwise, the mongo shell’s JavaScript
interpreter evaluates functions entered directly into the shell.
If an error occurs, db.eval() throws an exception. The
following is an example of an invalid function that uses the variable
x without declaring it as an argument:
The statement results in the following exception:
See also