MongoDB 服务器端脚本

1.简介

MongoDB可以通过db.eval函数来执行JS脚本,也可以把JS脚本保存在数据库中,然后在别的数据库命令中调用。

2.使用db.eval

//方式一
db.eval('var age = db.user.findOne({"id": 0}).age; db.user.update({"id": 0}, {"$set": {"age": age + 10}});');
//方式二
db.eval('function() { var age = db.user.findOne({"id": 0}).age; db.user.update({"id": 0}, {"$set": {"age": age + 10}}); }');
//传递参数
//1个参数
db.eval('function(username) { return "hello, " + username; }', "MongoDB");
//多个参数
db.eval('function(username, words) { return username + " said: " + words; }', "MongoDB", "HELLO");

db.eval可以用来模拟多文档事务:锁住数据库,然后执行JS,再解锁。

3.存储JS变量和代码

每个MongoDB数据库中有个特殊的集合,叫做system.js,用来存放JS变量和JS代码。

这些变量可以再任何MongoDB的JS上下文中调用,$where子句,db.eval,MapReduce作业。

存放变量

//新增
db.system.js.insert({"_id": "X", "value": 1});
db.system.js.insert({"_id": "Y", "value": 2});
//使用
db.eval("return X+Y;")
//改变
db.eval("X = 3;");
//查看改变后的结果
db.system.js.find();
//结果是X值不变

存放JS代码

//新增
db.system.js.insert({"_id": "sum", "value": function(x, y) { return x + y; }});
//使用
db.eval('sum(1, 2)');

猜你喜欢

转载自siyuan-zhu.iteye.com/blog/2032772