## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(nodbi) ## ----------------------------------------------------------------------------- # name of container key <- "my_container" # nodbi can connect any of these databases if (FALSE) { src <- src_duckdb() src <- src_mongo(collection = key) src <- src_sqlite() src <- src_postgres() src <- src_elastic() src <- src_couchdb( user = Sys.getenv("COUCHDB_TEST_USER"), pwd = Sys.getenv("COUCHDB_TEST_PWD") ) } # this example is run with src <- src_sqlite() # note additional parameters can be specified, # for example for local or remote MongoDb: help("src_mongo") ## ----------------------------------------------------------------------------- # check if container already exists docdb_exists(src = src, key = key) # load data from a data frame with row names into # the container specified in "key" parameter docdb_create(src = src, key = key, value = mtcars) # do not run during testing if (FALSE) { # load additionally 98 NDJSON records docdb_create(src, key, "https://httpbin.org/stream/98") } # load additionally mapdata as list docdb_create(src, key, jsonlite::fromJSON(mapdata, simplifyVector = FALSE)) # show JSON structure of contacts jsonlite::minify(contacts) # load additionally contacts JSON data docdb_create(src, key, contacts) ## ----------------------------------------------------------------------------- docdb_list(src = src) ## ----------------------------------------------------------------------------- # zero new documents created docdb_create(src, key, value = mtcars) ## ----------------------------------------------------------------------------- # use library for more # readable print output if (require(tibble)) { # get all documents, irrespective of schema as_tibble(docdb_get(src, key)) # get just 2 documents using limit and note that # only fields for these documents are returned as_tibble(docdb_get(src, key, limit = 2L)) } ## ----------------------------------------------------------------------------- # query for some documents docdb_query(src = src, key = key, query = '{"mpg": {"$gte": 30}}') ## ----------------------------------------------------------------------------- # query some fields from some documents; 'query' is a mandatory # parameter and is used here in its position in the signature docdb_query(src, key, '{"mpg": {"$gte": 30}}', fields = '{"wt": 1, "mpg": 1}') ## ----------------------------------------------------------------------------- # query some fields from some documents, limit return to one document docdb_query(src, key, '{"mpg": {"$gte": 30}}', fields = '{"_id": 0, "mpg": 1}', limit = 1L) ## ----------------------------------------------------------------------------- # query some subitem fields from some documents str(docdb_query( src, key, query = '{"$or": [{"age": {"$gt": 21}}, {"friends.name": {"$regex": "^B[a-z]{3,9}.*"}}]}', fields = '{"age": 1, "friends.name": 1}' )) ## ----------------------------------------------------------------------------- # query with results across documents docdb_query( src, key, query = '{"$or": [{"age": {"$gt": 21}}, {"mpg": {"$gte": 30}}]}', fields = '{"name": 1, "disp": 1}' ) ## ----------------------------------------------------------------------------- docdb_query(src, key, query = '{"_id": {"$regex": "^[0-9]"}}', listfields = TRUE) ## ----------------------------------------------------------------------------- # number of documents corresponding to query nrow(docdb_query(src, key, query = '{"carb": 3}')) # update all documents using JSON, replacing the previously existing values docdb_update(src, key, value = '{"vs": 9, "xy": [1, 2]}', query = '{"carb": 3}') # update with value that includes _id's docdb_update(src, key, value = '{"_id": "Merc 450SLC", "xy": 33}', query = "{}") # show updated values docdb_query(src, key, query = '{"carb": 3}', fields = '{"xy": 1}') ## ----------------------------------------------------------------------------- # number of documents corresponding to query nrow(docdb_query(src, key, query = '{"age": {"$lte": 23}}')) # to delete selected documents, specify a query parameter docdb_delete(src, key, query = '{"age": {"$lte": 23}}') # this deletes the complete container from database docdb_delete(src, key) # check if still exists docdb_exists(src, key) ## ----------------------------------------------------------------------------- src # shutdown DBI::dbDisconnect(src$con, shutdown = TRUE) rm(src)