I have a Shiny Application that uses a MongoDB (using mongolite). The application loads and saves to the database with no issues but I am trying to find a way to edit the MongoDB through a datatable(using DT) where when the user edits or deletes a row that they can press an actionbutton to update the mongoDB. When I try to run it currently I am getting
"Warning: Error in : argument must be bson or json."
Is there a way for me to edit from DT, convert it to the JSON Mongo is expecting from the Shiny app? Below is the code.
library(shiny)
library(DT)
library(mongolite)
ui <- fluidPage(
  # Application title
  titlePanel("MongoTest"),
  # Sidebar
  sidebarLayout(
    sidebarPanel(
      actionButton("submit", "Submit"),
      actionButton("load","Load"),
      actionButton("update","update"),
      actionButton("deleteRows", "Delete Rows")
    ),
    #Main UI
    mainPanel(
      fluidPage(
        fluidRow(h2("Interactive Table", align="center")),
        tags$hr(),
        fluidRow(
              DT::dataTableOutput("Interactive_Table")
        )
      )
    )
  )
)
server = function(input, output, session){
  #Function that loads the information from the mongoDB
  loadData <- function() {
    # Connect to the database
    db = mongo(collection = "collectionhere",db ="SET", url = "mongodb://localhost:27017")
    # Read all the entries
    data <- db$find()
    return(data)
  }
  READ_IN_DATA=loadData()
  values <- reactiveValues(dfWorking = READ_IN_DATA)
  #Function that saves data to DB
  saveData <- function(data) {
    # Connect to the database
    db = mongo(collection = "collectionhere",db ="SET", url = "mongodb://localhost:27017")
    data <- as.data.frame(t(data))
    db$insert(data)
  }
  updateData = function(data){
      # Connect to the database
      db = mongo(collection = "collectionhere",db ="SET", url = "mongodb://localhost:27017")
      data <- as.data.frame(t(data))
      #subjects$update('{}', '{"$set":{"has_age": false}}', multiple = TRUE)
      db$update(data)
  }
  #Loading In the Data
  observeEvent(input$load, {
    loadData()
  })
  #Update the DB based off changes to the table
  observeEvent(input$update, {
    updated_df=as.data.frame(values$dfWorking)
    updateData(t(updated_df))
  })
  #Deleting Rows
  observeEvent(input$deleteRows,{
    if (!is.null(input$Interactive_Table_rows_selected)) {
      values$dfWorking <- values$dfWorking[-as.numeric(input$Interactive_Table_rows_selected),]
    }
  })
  #DT Table
  output$Interactive_Table = renderDataTable({
    datatable(values$dfWorking,editable=TRUE
    )
  })
}
# Run the application 
shinyApp(ui = ui, server = server)