在服务器上存储 JavaScript 函数
重要
从 MongoDB 8.0 开始,服务器端 JavaScript 已弃用。 system.js
功能可能不适用于所有特征。
一个名为 system.js
的特殊系统集合可以存储 JavaScript 函数,以供重复使用。
开始之前
此任务使用旧版 mongo
shell 从 system.js
集合中加载服务器端函数。不再支持此版本的 shell。有关 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(带作用域) 的函数不能被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 }