mongodb-存储过程

mongodb 存储过程


存储过程可以说是在SQL中非常的关键,突然换到mongodb,尽管有很多的优势,但是在表间的关联是的确不如从前了,JS可以说在某种程度上弥补了这一遗憾。

比如函数:

db.system.js.save({_id:"add",value:function(x,y){pint(x+y);}});  

调用方式:

db.eval('add(3,4)')

ok,在编写完getIndexJs的函数发生了问题

WARNING: db.eval is deprecated
Error: {
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { $eval: \"getIndexJs('2007_0020')\" }",
	"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:23:13
DB.prototype.eval@src/mongo/shell/db.js:553:1
@(shell):1:1

一、WARNING: db.eval is deprecated

查询官方文件,当使用db.eval会生成一个全局锁,即将整个数据库锁住,阻止其他的读写操作。

官网建议如果是长时间使用db.eval,就应该考虑使用其他的非锁的操作函数。不过没有找到对应的替代函数,只能先用它了。


二、"not authorized on admin to execute command

这句话告诉我,无权限调用eval函数,是的,在使用分片及副本集的时候,我开启了keyFile选项,对于权限管理见下一篇。

所以需要的操作是给当前的用户添加权限,能够执行eval函数。

参照网友的说法,先创建一个role,赋予特殊权限,这个特殊权限拥有所有的数据库的所有操作:

db.createRole(

role:'adminJs',

role:[],

privileges:[

{resource:{anyResource:true},actions:['anyAction']}

]

)

db.grantRolesToUser('sup',roles:

[{

role:'adminJs',db:'admin'

}])

那么这样,我就在当前的权限下添加了新的角色,再次调用就不会有问题。

其实使用mongoChef就非常的方便


存储过程的要点是要了解JS函数


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值