gpt4 book ai didi

r - Shiny 的 mongolite 查询

转载 作者:行者123 更新时间:2023-12-01 22:34:15 26 4
gpt4 key购买 nike

我想在 Shiny 的响应式(Reactive)上下文中运行 mongolite 查询。数据库连接参数是预先加载的,下面未显示。 (注意:loadData 函数出现在第一个代码块中)。该查询在响应式(Reactive)上下文之外运行得很好。

我似乎无法在网上找到 Shiny 和 mongolite 一起工作的工作示例。任何帮助将不胜感激。在下面的简化示例中,我只是尝试让 Shiny 返回查询结果中的行数。

谢谢

loadData <- function() {
# Connect to the database
db <- mongo(collection = collectionName,
url = sprintf(
"mongodb://%s:%s@%s/%s",
options()$mongodb$username,
options()$mongodb$password,
options()$mongodb$host,
databaseName))
# Read all the entries
data <- db$find(query)
data
}


server <- function(input, output) {

queryResults <- reactive({

########----------BRING IN USER QUERY PARAMETERS----------########
var1 <- "satisfaction"
var2 <- "performance"
var1path <- 20072
var2path <- 30033

########----------DEFINE QUERY PARAMETERS----------########
var1 <- as.character(var1)
var1 <- paste(var1, collapse = "|")
var1JSON <- toJSON (var1)

var2 <- as.character(var2)
var2 <- paste(var2, collapse = "|")
var2JSON <- toJSON (var2)

#-----Creating JSONs for taxonomy codes

var1path <- as.character(var1path)
var1path <- paste(var1path, collapse = "|")
var1path <- toJSON (var1path)

var2path <- as.character(var2path)
var2path <- paste(var2path, collapse = "|")
var2path <- toJSON (var2path)

########----------QUERY STRUCTURE AND EXECUTION----------#########
query <- c('
{"$and":
[
{"$or":
[
{"Var1": { "$regex": ',var1JSON,' }},
{"Var1Path": { "$regex": ',var1path,' }}
]
},

{"$or":
[
{"Var2": { "$regex": ',var2JSON,' }},
{"Var2Path": { "$regex": ',var2path,' }}
]
}
]
}
')

stuff <- loadData()
stuff
})

output$text1 <- renderText(nrow(queryResults()))

最佳答案

由于我无法重现您的代码,因此我正在设置自己的数据,但希望这将向您展示 mongoliteshiny 的工作示例。

数据

将一些数据输入mongodb

library(mongolite)

## create dummy data
df <- data.frame(id = c(1,2,3),
region = c("r1", "r1", "r2"))

> df
id region
1 1 r1
2 2 r1
3 3 r2

## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)
# Complete! Processed total of 3 rows.
# [1] TRUE

Shiny

这是一个非常基本的应用程序,可以响应用户输入。我尽力与您的结构保持一致

服务器.R

library(shiny)
library(jsonlite)
library(mongolite)

loadData <- function(qry){
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost",
verbose = TRUE)

df <- mong$find(qry)
return(df)
}


shinyServer(function(input, output) {

qryResults <- reactive({

## This bit responds to the user selection
## which makes it 'reactive'
region <- list(region = input$si_region)

qry <- paste0('{ "region" : "',region , '"}')
df <- loadData(qry)
return(df)
})

output$qry_results <- renderDataTable({
qryResults()
})

output$text1 <- renderText(nrow(qryResults()))

})

ui.R

library(shiny)

shinyUI(navbarPage("mongo query",
sidebarLayout(
sidebarPanel(
selectInput(inputId = "si_region", label = "Select region", choices = c("r1", "r2"))
),
mainPanel(
verbatimTextOutput(outputId = "text1"),
dataTableOutput(outputId = "qry_results")
)
)))

关于r - Shiny 的 mongolite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34793400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com