在服务器上存储 JavaScript 函数
重要
从 MongoDB 8.0 开始,服务器端 JavaScript 已被弃用。system.js
功能可能不适用于所有功能。
存在一个名为 system.js
的特殊系统集合,可以用于存储可重复使用的 JavaScript 函数。
开始之前
此任务使用的是传统mongo
命令行工具从 system.js
集合加载服务器端函数。这个版本的命令行工具已不再受支持。有关 MongoDB Shell 中的替代解决方案,请参阅编写脚本.
关于此任务
使用 system.js
时请考虑以下建议
不要将应用程序逻辑存储在数据库中。
在 MongoDB 中运行 JavaScript 存在性能限制。
当应用程序代码与应用程序共享版本控制时,它最为有效。
步骤
要存储一个函数,将函数插入到 system.js
集合中,如下例所示
1
2
将JavaScript函数存储到数据库中
要将JavaScript函数存储到数据库中,请插入具有以下字段的文档
字段
_id
保存函数名称,每个数据库中是唯一的。字段
value
保存函数定义。
以下示例在 system.js
集合中创建一个 echo
函数
db.system.js.insertOne( { _id: "echo", value : function(x) { return x; } } )
以下示例在 system.js
集合中创建一个 isEven
函数
db.system.js.insertOne( { _id: "isEven", value: function (num) { return num % 2 === 0; } } )
这些函数以 BSON类型 保存,可以在任何JavaScript上下文中使用,例如 mapReduce
和 $where
。
注意
以已弃用的BSON类型 JavaScript (with scope) 保存的函数,不能由 mapReduce
和 $where
使用。
4
运行存储的JavaScript函数
以下代码示例运行存储在
system.js
中的echo
函数echo("test") test 以下代码示例在
test_numbers
集合的$where
操作符上运行存储在system.js
中的isEven
函数db.test_numbers.find({ $where: function () { return isEven(this.value); } }) { "_id" : ObjectId("668d7be41b55bec1bf191499"), "value" : 2 } { "_id" : ObjectId("668d7be41b55bec1bf19149b"), "value" : 4 } { "_id" : ObjectId("668d7be41b55bec1bf19149d"), "value" : 6 }