eval¶
-
eval
¶ The
eval
command evaluates JavaScript functions on the database server and has the following form:The command contains the following fields:
Field Type Description eval
function A JavaScript function. args
array Optional. An array of arguments to pass to the JavaScript function. Omit if the function does not take arguments. nolock
boolean Optional. By default, eval
takes a global write lock before evaluating the JavaScript function. As a result,eval
blocks all other read and write operations to the database while theeval
operation runs. Setnolock
totrue
on theeval
command to prevent theeval
command from taking the global write lock before evaluating the JavaScript.nolock
does not impact whether operations within the JavaScript code itself takes a write lock.JavaScript in MongoDB
Although
eval
uses JavaScript, most interactions with MongoDB do not use JavaScript but use an idiomatic driver in the language of the interacting application.
Behavior¶
Write Lock¶
By default, eval
takes a global write lock while evaluating the
JavaScript function. As a result, eval
blocks all other read and
write operations to the database while the 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 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 eval
with sharded collections.
In general, you should avoid using eval
in sharded clusters; nevertheless, it is possible to use eval
with
non-sharded collections and databases stored in a sharded
cluster.
Access Control¶
With authentication
enabled, 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.
Example¶
The following example uses eval
to
perform an increment and calculate the average on the server:
The db
in the function refers to the current database.
The mongo
shell provides a helper method
db.eval()
[1], so you can express the
above as follows:
If you want to use the server’s interpreter, you must run
eval
. Otherwise, the mongo
shell’s
JavaScript interpreter evaluates functions entered directly into the
shell.
If an error occurs, eval
throws an exception.
The following invalid function uses the variable x
without
declaring it as an argument:
The statement will result in the following exception:
See also
[1] | The helper db.eval() in the mongo shell wraps the
eval command. Therefore, the helper method shares the
characteristics and behavior of the underlying command with one
exception: db.eval() method does not support the nolock
option. |