Ruby on rails Mongo::Error::OperationFailure(未授权[my_db]执行命令)

Ruby on rails Mongo::Error::OperationFailure(未授权[my_db]执行命令),ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我使用的是Rails 5.2.0、Ruby 2.5.0和MongoId 7.1.0 一切正常,但我使用下面的代码来获取有关集合大小的信息。但现在它失败了,出现了错误: Mongo::Error::OperationFailure (not authorized on[mydb] to execute command { $eval: " var collectionNames = db.getCollectionNames(), stats = []; collectionNam

我使用的是Rails 5.2.0、Ruby 2.5.0和MongoId 7.1.0

一切正常,但我使用下面的代码来获取有关集合大小的信息。但现在它失败了,出现了错误:

Mongo::Error::OperationFailure (not authorized on[mydb] to execute command { $eval: "
    var collectionNames = db.getCollectionNames(), stats = [];
    collectionNames.forEach(function (n) { stats.push(db[n].stats()); });
    stats = ...", args: [], nolock: true, $db: "super_control_development", $readPreference: { mode: "primary" } } (13)):
代码是:

db ||= Mongoid.default_client.database

# db = Mongoid::Config.clients[:default][:database]
f = """
var collectionNames = db.getCollectionNames(), stats = [];
collectionNames.forEach(function (n) { stats.push(db[n].stats()); });
stats = stats.sort(function(a, b) { return b['size'] - a['size']; });
return stats;
"""
result = db.command({:$eval => f, args: [], nolock: true})
@result_data = result.first['retval']
有人帮我吗

更多信息:

  • my mongoid.yml中的选项是
{“数据库”=>“mydb”、“用户”=>“所有者”、“密码”=>“mypass”、“验证源”=>“超级控制开发”、“平台”=>“mongoid-7.1.0”}

  • 在终端的MongoShell中,代码运行良好,没有错误

谢谢。

的意思正是它所说的。当前用户无权在服务器上使用
eval
命令。无论如何,您确实不应该使用
eval
,因为它已被弃用并标记为要删除。这意味着您的代码将在将来的版本中停止工作。您试图在JavaScript代码中运行的任何东西都可以使用语言本机驱动程序运行。这就是你应该做的。@NeilLunn,谢谢你的评论。但是我是db.grantRolesToUser(“owner”,“readWrite”]),并在mongo shell中测试它,但我想在Rails的控制器中测试它,如果我不使用$eval,如何运行所有命令?
eval
需要特殊的权限。
“readWrite”
角色不足以执行此操作,因为您可以用它来做“讨厌的”事情。虽然你不想评估,但你没在听。用“ruby驱动程序”编写代码。所有方法都可以在标准API中使用。如果您不介意的话,请给我一些关于ruby drive中API标准集合的统计大小的信息。谢谢。文件是免费提供的。例如。在shell中可以执行的所有操作都可以在驱动程序中执行。如果没有直接的方法,那么使用
命令
和any,您不需要为这些执行JavaScript。