在MongoDB Java中运行脚本命令/文件

时间:2018-09-14 13:27:53

标签: java mongodb groovy

我搜索了一半的互联网,但没有发现db.eval(),或者什么也没有找到过时的解决方案。因此,我的问题。

我有一些使用mongo驱动程序3.5.0的代码:

MongoDatabase db = mongoClient.getDatabase 'mydb'
println db.runCommand( new BasicDBObject( eval:'db.version()' ) )
  

线程“ main”中的异常com.mongodb.MongoCommandException:命令失败,错误13:“未在mydb上授权执行命令{eval:“ db.version()”,$ readPreference:{模式:“ secondaryPreferred”} ,$ db:“ mydb”}'在服务器localhost:27017上。完整的响应为{“ ok”:0.0,“ errmsg”:“未经mydb授权执行命令{eval:\” db.version()\“,$ readPreference:{mode:\” secondaryPreferred \“}},$ db:\“ mydb \”}“,”代码“:13,” codeName“:”未经授权“}       在com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115)       在com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:107)上

我可以在shell中运行以下命令:

mongo "mongodb://admin:admin@somehost:27003/mydb?replicaSet=myset" -eval 'db.version()'

输出

  

3.6.6

如果我从外壳内部运行命令:

db.runCommand( { 'eval':'db.version()' } )

我也得到

  

{           “ operationTime”:时间戳(1536931496,11),           “ ok”:0,           “ errmsg”:“未授权mydb执行命令{eval:\” db.version()\“,$ db:\” mydb \“}”,           “代码”:13           “ codeName”:“未经授权”   }

与我联系的用户如下:

{
    "_id" : "mydb.admin",
    "user" : "admin",
    "db" : "mydb",
    "roles" : [
            {
                    "role" : "readWrite",
                    "db" : "mydb"
            },
            {
                    "role" : "dbAdmin",
                    "db" : "mydb"
            },
            {
                    "role" : "userAdmin",
                    "db" : "mydb"
            },
            {
                    "role" : "dbOwner",
                    "db" : "mydb"
            }
    ]
}

我想念什么? 我需要eval的特殊特权吗?

1 个答案:

答案 0 :(得分:1)

根据mongodb文档,您需要一个在anyAction上授予AnyResource的角色。