Mongodb Query в Shiny R для получения данных из базы данных с использованием реактивного ввода - PullRequest
0 голосов
/ 06 октября 2018
library(shiny)
library(mongolite)

ui <- fluidPage( 
    titlePanel("Mongodb Data"),
    sidebarLayout(
        sidebarPanel(
             textInput("_id", "Document type:", "")
        ),
        mainPanel(
            dataTableOutput("mydata")
        )
    )
)

server <- function(input, output) {
    mon <- mongo(collection = "collectionname", db = "db name", url = "mongodb://localhost:27017")
    output$mydata <- renderDataTable({
        doc_type <- paste0(doc_type= input$doc_id)

        mon$find(  query = '{"doc_type" : {"$in" : ["x", "y"]} }' , limit = 100) 
    })
}
}

Предупреждение: ошибка, операция не разрешена без активного реактивного контекста.(Вы пытались сделать что-то, что можно сделать только из реактивного выражения или наблюдателя.)

Как добавить реактивный запрос и извлечь данные из определенного столбца из коллекции MongoDB?всякий раз, когда я даю текстовое значение ввода x или y, он должен показывать соответствующие документы из базы данных MongoDB.

1 Ответ

0 голосов
/ 06 октября 2018

Вам нужен запрос, который изменяется в зависимости от ввода пользователя.Попробуйте изменить код вашего сервера на это.Я думаю, что в вашем вопросе есть опечатка, и ваш фактический ввод такой: textInput("doc_id", "Document type:", "")

Сервер:

  mon <- mongo(collection = "collectionname", db = "db name", url = "mongodb://localhost:27017")

  # Create a reactive element. Changes when the user input changes
  data.for.table <- reactive({
    # Build a query that concatenates value of input$doc_id to other strings
    query.foo <- paste0('{"doc_type" : {"', input$doc_id, '" : ["x", "y"]} }' )
    # Retrieve data
    mon$find(query = query.foo, limit = 100)
  })

  output$mydata <- renderDataTable({
    data.for.table()
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...