数据冗余冗余拉

时间:2019-09-13 18:26:54

标签: r shiny

我有一个Shiny应用程序,正在从我的mongo DB导入数据。我正在使用Shinymanager软件包进行身份验证。

我遇到的问题是,数据在用户登录之前导入一次,而在用户登录之后再次导入。

目标是仅一次提取数据集。可以在用户登录之前或之后。

gloabl.R

urlm = #"myMongoUrl"

df.orats = mongo(collection = "df.orats", db = "test", url = urlm, verbose = T)
df.finalVol = mongo(collection = "df.finalVol", db = "test", url = urlm, verbose = T)
df.pass = mongo(collection  = "df.pass", db = "test", url = urlm, verbose = T)

Server.R

function(input, output, session) {

secure_server(check_credentials = check_credentials(z))


    df.f = df.orats$find()
    df.h = df.finalVol$find()

    df.new = reactive({
      df.h %>% filter(Price, Ivol)
    })

   }

如您所见,这两个数据集被两次导入。 enter image description here

我正在寻找类似于req(check_credentials)之类的东西。

我尝试使用。

observerEvent(req(check_credentials(z),{
df.f = df.orats$find()
    df.h = df.finalVol$find()

    df.new = reactive({
      df.h %>% filter(Price, Ivol)
    })
})

但是数据仍然被导入两次。 任何意见是极大的赞赏。

最后,这是一张直观的图片。 enter image description here

enter image description here

下面是@Siddharth Arthi的代码,因为他正在帮助我。我添加了一行代码来打印结果。如您所见,认证前后的结果均为假。

secure_server(check_credentials = check_credentials(z))

   returns <- check_credentials(z)
    observe({print(returns("results")[1])})

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

不是使用check_credentials()函数作为事件,而是使用函数返回的结果来确认用户身份验证并从Mongo中获取数据。

原始代码的更新摘要:

returns <- check_credentials(z)

observeEvent(returns(result)[1],{
if(returns(result)[1]){
df.f = df.orats$find()
    df.h = df.finalVol$find()

    df.new = reactive({
      df.h %>% filter(Price, Ivol)
    })
}
})

observeEvent 将在传递的值得到更新时运行。但是,在我们的情况下,它需要运行一次,例如在用户登录后运行。上面的代码段将满足此条件。希望这会有所帮助!

编辑:根据约旦的输入进行更新。

userAuth <- secure_server(check_credentials = check_credentials(z))

observeEvent(userAuth$user,{

df.f = df.orats$find()
    df.h = df.finalVol$find()

    df.new = reactive({
      df.h %>% filter(Price, Ivol)
    })

})

默认情况下,secure_server函数将在身份验证成功时返回以列表形式输入的用户名。我们可以尝试使用它作为触发来处理我们的数据。让我知道是否有帮助!