【发布时间】:2016-05-07 04:22:48
【问题描述】:
使用 MongoDB 来安排资源预留。为了确保损坏的客户端不会破坏系统,我想获取服务器时间并基于它进行查询。
我认为服务器端 javascript 可以做到这一点,但 mongoid gem 不直接支持,并且由于似乎有 db 用户权限而无法工作。
我在做:
time_now = MongoModels::User.collection.database.session.cluster.with_primary do
MongoModels::User.collection.database.command(eval: """
function() {.
var now=new Date()
return now.toISOString()
"""
)
end
我明白了:
failed with error 13: "not authorized on cucushift to execute command { eval:
...
我认为不使用 javascript 的另一种方法是获取服务器状态。它应该包含当地时间。但我找不到通过mongoid 获取服务器状态的方法。
如果有人知道如何获取服务器状态或知道另一种获取服务器本地时间的方法。或者知道如何制作我的查询,以便它与服务器时间而不是客户端机器时间进行比较,那会很棒。谢谢!
更新:看来我也不允许做 serverStatus:
MongoModels::User.collection.database.command(serverStatus: 1)
failed with error 13: "not authorized on cucushift to execute command { serverStatus: 1 }"
这很奇怪 IMO,因为它没有被列为仅管理员。做listCommands我明白了:
"serverStatus"=>
{"help"=>"returns lots of administrative server statistics",
"slaveOk"=>true,
"adminOnly"=>false}
【问题讨论】: