我正在構建一個閃亮的應用程式,它使用 Mongolite 包連接到 MongoDb Atlas 實體。這是我的 MWE(我不介意分享對我的 Mongo 實體的訪問權限,這只是一個測驗)
用戶界面
fluidPage(
title = 'Select Table Rows',
h1('A Client-side Table'),
fluidRow(
column(6, DT::dataTableOutput('x1')),
column(6, plotOutput('x2', height = 500))
)
,fluidRow(
column(6,checkboxInput("chkBoxInp_ShowStopper","Showstopeer"))
,column(6,textInput("txtInp_Description","Description"))
)
,fluidRow(
column(6,actionButton(inputId = "Insert", label = "Add"))
,column(6,actionButton(inputId = "Refresh", label = "Refresh"))
)
)
服務器.R
library(mongolite)
library(shiny)
mongo_db_user <<- "pavel"
mongo_db_password <<- "Semeolvido1"
mongo_clustername <<- "cluster0.ii3mw98.mongodb.net"
mongo_database <<- "ejemplo"
mongo_collection <<- "tracker"
url_path = sprintf("mongodb srv://%s:%s@%s", mongo_db_user, mongo_db_password, mongo_clustername)
mongo_con<<-mongo(collection = mongo_collection,url = paste0(url_path,"/",mongo_database))
function(input, output, session) {
RV<<-reactiveValues()
RV$track<<-mongo_con$find("{}")
output$x1 = DT::renderDataTable(RV$track, server = TRUE)
observeEvent(input$Insert,{
new_raidid<-as.numeric(max(mongo_con$find("{}")$raidid)) 1
data <- data.frame(raidid = new_raidid,
showstopper = input$chkBoxInp_ShowStopper,
description = input$txtInp_Description)
mongo_con$insert(data)
RV$track<<-mongo_con$find("{}")
})
observeEvent(input$Refresh,{
RV$track<<-mongo_con$find("{}")
})
}
您可以在 shinyapp.io 訪問此應用程式:
當我從一臺計算機添加一些記錄時,此應用程式運行正常。
我的問題是當我同時從兩臺不同的計算機連接到應用程式時。似乎這些按鈕僅在我連接的最后一臺計算機上有效。我的意思是,當我從第二臺計算機添加一條記錄時,該記錄出現在第二臺計算機顯示的資料表中,但即使單擊“重繪 ”按鈕,它也不會出現在第一臺計算機中。
我想要的是我從任何計算機添加的要在所有會話中可視化的記錄。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
因為你使用你在這里的全域環境<<-
中創建:RV
RV<<-reactiveValues()
每次新會話開始時都會運行,每次都會覆寫共享 RV
物件。我不太清楚為什么,但這會導致更新僅在最后一個會話中觸發失效。
RV
要解決此問題,請為每個會話分配一個單獨的:
RV <- reactiveValues()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522223.html