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)');