nodbi

Document DBI connector for R

https://github.com/ropensci/nodbi

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.6%) to scientific vocabulary

Keywords

couchdb database elasticsearch mongodb nosql postgresql r r-package rstats sqlite

Keywords from Contributors

genome mock http-mock geo sequenced-genomes biodiversity taxize taxonomy polygon ebird
Last synced: 6 months ago · JSON representation

Repository

Document DBI connector for R

Basic Info
Statistics
  • Stars: 76
  • Watchers: 8
  • Forks: 6
  • Open Issues: 0
  • Releases: 33
Topics
couchdb database elasticsearch mongodb nosql postgresql r r-package rstats sqlite
Created almost 11 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog Contributing License Codemeta

README.Rmd

---
output: github_document
editor_options: 
 chunk_output_type: console
---

# nodbi

```{r echo=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  eval = FALSE,
  comment = "#",
  out.width = "100%"
)
```

⁠
[![R-CMD-check](https://github.com/ropensci/nodbi/workflows/R-CMD-check/badge.svg)](https://github.com/ropensci/nodbi/actions?query=workflow%3AR-CMD-check)
[![codecov](https://codecov.io/gh/rfhb/nodbi/branch/master/graph/badge.svg)](https://app.codecov.io/gh/rfhb/nodbi)
[![CRAN status](https://www.r-pkg.org/badges/version/nodbi)](https://CRAN.R-project.org/package=nodbi)
[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable)
⁠

`nodbi` is an R package that provides a single interface for several NoSQL databases and databases with JSON functionality, with the same function parameters and return values across all database backends. Last updated 2025-07-12.

| Currently, `nodbi` supports
as database backends | for an `R` object of any
of these data types | for these operations | | :--------------------- | :--------------------- | :--------------------- | | MongoDB | data.frame | List, Exists | | SQLite | list | Create | | PostgreSQL | JSON string | Get | | DuckDB | file name of NDJSON records | Query | | Elasticsearch | URL of NDJSON records | Update | | CouchDB | | Delete | For speed comparisons of database backends, see [benchmark](#benchmark) and [testing](#testing) below. ## API overview Parameters for `docdb_*()` functions are the same across all database backends. See [walk-through](#walk-through) below and the canonical testing in [core-nodbi.R](./tests/testthat/core-nodbi.R). "Container" is used as term to indicate where conceptually the backend holds the data, see [Database connections](#database-connections) below. The `key` parameter holds the name of a container. | Purpose | Function call | | :------------------------------ | :------------------------------------ | | Create database connection (see below) | `src <- nodbi::src_{duckdb, postgres, mongo, sqlite, couchdb, elastic}()` | | Load `my_data` (a data frame, list, JSON string, or file name or URL pointing to NDJSON records) into database, container `my_container` | `nodbi::docdb_create(src = src, key = "my_container", value = my_data)` | | Get all documents back into a data frame | `nodbi::docdb_get(src = src, key = "my_container")` | | Get documents selected with query (as MongoDB-compatible JSON) into a data frame | `nodbi::docdb_query(src = src, key = "my_container", query = '{"age": 20}')` | | Get selected fields (in MongoDB compatible JSON) from documents selected by query into a data frame | `nodbi::docdb_query(src = src, key = "my_container", query = '{"age": {"$gt": 20}}', fields = '{"friends.name": 1, "_id": 0, "age": 1}', limit = 2L)` | | Update (patch) documents selected by query with new data `my_data` (in a data frame, list, JSON string, or file name or URL pointing to NDJSON records) | `nodbi::docdb_update(src = src, key = "my_container", value = my_data, query = '{"age": 20}')` | | Check if container exists | `nodbi::docdb_exists(src = src, key = "my_container")` | | List all containers in database | `nodbi::docdb_list(src = src)` | | Delete document(s) in container | `nodbi::docdb_delete(src = src, key = "my_container", query = '{"age": 20}')` | | Delete container | `nodbi::docdb_delete(src = src, key = "my_container")` | | Close and remove database connection manually (when restarting R, connections are automatically closed and removed by `nodbi`) | `rm(src)` | ## Install CRAN version ```{r eval=FALSE} install.packages("nodbi") ``` Development version ```{r eval=FALSE} remotes::install_github("ropensci/nodbi") ``` Load package from library ```{r} library("nodbi") ``` ## Database connections {#database-connections} Overview on parameters and aspects that are specific to the database backend. These are only needed once, for for `src_*()` to create a connection object. Any such connection object is subsequently used similarly across the `docdb_*` functions. "Container" refers to how conceptually the backend holds the data. Data types are mapped from JSON to R objects by [jsonlite](https://CRAN.R-project.org/package=jsonlite). Any root-level `_id` is extracted from the document(s) and used for an index column `_id`, otherwise a UUID is created as `_id`. ### DuckDB See also . "Container" refers to a DuckDB table, with columns `_id` and `json` created and used by package `nodbi`, applying SQL functions and functions as per to the `json` column. Each row in the table represents a `JSON` document. ```{r} src <- nodbi::src_duckdb(dbdir = ":memory:", ...) ``` ### MongoDB "Container" refers to a MongoDB collection, in which `nodbi` creates JSON documents. See also . MongoDB but none of the other databases require to specify the container name already in the `src_*()` function; use the `collection` name for parameter `key` in `docdb_*` functions. ```{r} src <- nodbi::src_mongo( collection = "my_container", db = "my_database", url = "mongodb://localhost", ... ) ``` ### SQLite "Container" refers to an SQLite table, with columns `_id` and `json` created and used by package `nodbi`, applying SQL functions and functions as per to the `json` column. Each row in the table represents a `JSON` document. The table is indexed on `_id`. See also . ```{r} src <- nodbi::src_sqlite(dbname = ":memory:", ...) ``` ### CouchDB "Container" refers to a CouchDB database, in which `nodbi` creates JSON documents. See also . With CouchDB, function `docdb_update()` uses [jqr](https://cran.r-project.org/package=jqr) to implement patching JSON, in analogy to functions available for the other databases. ```{r} src <- nodbi::src_couchdb( host = "127.0.0.1", port = 5984L, path = NULL, transport = "http", user = NULL, pwd = NULL, headers = NULL ) ``` ### Elasticsearch "Container" refers to an Elasticsearch index, in which `nodbi` creates JSON documents. Opensearch can equally be used. See also . Only lowercase is accepted for container names (in parameter `key` of `docdb_*` functions). ```{r} src <- nodbi::src_elastic( host = "127.0.0.1", port = 9200L, path = NULL, transport_schema = "http", user = NULL, pwd = NULL, ... ) ``` ### PostgreSQL "Container" refers to a PostgreSQL table, with columns `_id` and `json` created and used by package `nodbi`, applying SQL functions and functions as per to the `json` column. With PostgreSQL, a custom `plpgsql` function [jsonb_merge_patch()](https://github.com/ropensci/nodbi/blob/master/R/src_postgres.R#L60) is used for `docdb_update()`. The order of variables in data frames returned by `docdb_get()` and `docdb_query()` can differ from their order the input to `docdb_create()`. ```{r} src <- nodbi::src_postgres( dbname = "my_database", host = "127.0.0.1", port = 5432L, ... ) ``` ## Walk-through {#walk-through} This example is to show how functional `nodbi` is at this time: With any of the six database backends, the functions work in the same way and return the same values. ```{r} # load nodbi library(nodbi) # name of container key <- "my_container" # connect any of these database backends 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") ) # check if container already exists docdb_exists(src, key) # [1] FALSE # load data (here data frame, alternatively a list, JSON or file with NSJSON) # into the container "my_container" specified in "key" parameter docdb_create(src, key, value = mtcars) # [1] 32 # load additionally 98 NDJSON records docdb_create(src, key, "https://httpbin.org/stream/98") # Note: container 'my_container' already exists # [1] 98 # load additionally contacts JSON data, from package nodbi docdb_create(src, key, contacts) # Note: container 'my_container' already exists # [1] 5 # get all documents, irrespective of schema dplyr::tibble(docdb_get(src, key)) # # A tibble: 135 × 27 # `_id` isActive balance age eyeColor name email about registered tags friends # # 1 5cd6… TRUE $2,412… 20 blue Kris… kris… "Sin… 2017-07-1… # 2 5cd6… FALSE $3,400… 20 brown Rae … raec… "Nis… 2018-12-1… # 3 5cd6… TRUE $1,161… 22 brown Pace… pace… "Eiu… 2018-08-1… # 4 5cd6… FALSE $2,579… 30 brown Will… will… "Nul… 2018-02-1… # 5 5cd6… FALSE $3,808… 23 green Lacy… lacy… "Sun… 2014-08-0… # 6 69bc… NA NA NA NA NA NA NA NA # 7 69bc… NA NA NA NA NA NA NA NA # 8 69bc… NA NA NA NA NA NA NA NA # 9 69bc… NA NA NA NA NA NA NA NA # 10 69bc… NA NA NA NA NA NA NA NA # # ℹ 125 more rows # # ℹ 16 more variables: url , args , headers , origin , # # id , mpg , cyl , disp , hp , drat , wt , # # qsec , vs , am , gear , carb # # ℹ Use `print(n = ...)` to see more rows # query some documents docdb_query(src, key, query = '{"mpg": {"$gte": 30}}') # _id mpg cyl disp hp drat wt qsec vs am gear carb # 1 Fiat 128 32 4 79 66 4.1 2.2 19 1 1 4 1 # 2 Honda Civic 30 4 76 52 4.9 1.6 19 1 1 4 2 # 3 Toyota Corolla 34 4 71 65 4.2 1.8 20 1 1 4 1 # 4 Lotus Europa 30 4 95 113 3.8 1.5 17 1 1 5 2 # 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}') # _id wt mpg # 1 Fiat 128 2.2 32 # 2 Honda Civic 1.6 30 # 3 Lotus Europa 1.5 30 # 4 Toyota Corolla 1.8 34 # 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}' )) # 'data.frame': 3 obs. of 3 variables: # $ _id : chr "5cd6785325ce3a94dfc54096" "5cd6785335b63cb19dfa8347" "5cd67853f841025e65ce0ce2" # $ age : int 22 30 23 # $ friends.name:List of 3 # ..$ : chr "Baird Keller" "Francesca Reese" "Dona Bartlett" # ..$ : chr "Coleen Dunn" "Doris Phillips" "Concetta Turner" # ..$ : chr "Wooten Goodwin" "Brandie Woodward" "Angelique Britt" # such queries can also be used for updating (patching) selected documents # with a new 'value'(s) from a JSON string, a data frame a list or a file with NSJSON) docdb_update(src, key, value = '{"vs": 9, "xy": [1, 2]}', query = '{"carb": 3}') # [1] 3 docdb_query(src, key, '{"carb": {"$in": [1,3]}}', fields = '{"vs": 1, "_id": 0}')[[1]] # [1] 1 1 1 9 9 9 1 1 1 1 docdb_get(src, key)[c(3, 109, 130, 101), c("_id", "xy", "url", "email")] # _id xy url email # 3 5cd6785325ce3a94dfc54096 NULL pacebell@conjurica.com # 109 Dodge Challenger NULL # 130 Pontiac Firebird NULL # 101 69bcd195-a59c-11ee-bfb9-acbc328130bb NULL https://httpbin.org/stream/98 # use with dplyr # *note* that dplyr includes a (deprecated) function src_sqlite # which would mask nodbi's src_sqlite, so it is excluded here library("dplyr", exclude = c("src_sqlite", "src_postgres")) # docdb_get(src, key) %>% group_by(gear) %>% summarise(mean_mpg = mean(mpg)) # # A tibble: 4 × 2 # gear mean_mpg # # 1 3 16.1 # 2 4 24.5 # 3 5 21.4 # 4 NA NA # delete documents; query is optional parameter and has to be # specified for deleting documents instead of deleting the container dim(docdb_query(src, key, query = '{"$or": [{"age": {"$lte": 20}}, {"age": {"$gte": 25}}]}')) # [1] 3 11 docdb_delete(src, key, query = '{"$or": [{"age": {"$lte": 20}}, {"age": {"$gte": 25}}]}') # TRUE nrow(docdb_get(src, key)) # [1] 132 # delete container from database docdb_delete(src, key) # [1] TRUE # # shutdown DBI::dbDisconnect(src$con, shutdown = TRUE) rm(src) ``` ## Benchmark {#benchmark} ```{r} library("nodbi") srcMongo <- src_mongo() srcSqlite <- src_sqlite() srcPostgres <- src_postgres() srcDuckdb <- src_duckdb() srcElastic <- src_elastic() srcCouchdb <- src_couchdb( user = Sys.getenv("COUCHDB_TEST_USER"), pwd = Sys.getenv("COUCHDB_TEST_PWD") ) key <- "test2" query <- '{"clarity": {"$in": ["NOTME", "VS1"]}}' fields <- '{"cut": 1, "_id": 1, "clarity": 1}' value <- '{"clarity": "XYZ", "new": ["ABC", "DEF"]}' data <- diamonds[1:1000, ] ndjs <- tempfile() jsonlite::stream_out(diamonds[1:10000, ], con = file(ndjs), verbose = FALSE) testFunction <- function(src, key, value, query, fields) { try(docdb_delete(src, key), silent = TRUE) on.exit(docdb_delete(src, key)) suppressMessages(docdb_create(src, key, data)) suppressMessages(docdb_create(src, key, ndjs)) head(docdb_get(src, key)) docdb_query(src, key, query = query, fields = fields) docdb_query(src, key, query = query, listfields = TRUE) docdb_update(src, key, value = value, query = query) } result <- rbenchmark::benchmark( MongoDB = testFunction(src = srcMongo, key, value, query, fields), SQLite = testFunction(src = srcSqlite, key, value, query, fields), Elastic = testFunction(src = srcElastic, key, value, query, fields), CouchDB = testFunction(src = srcCouchdb, key, value, query, fields), PostgreSQL = testFunction(src = srcPostgres, key, value, query, fields), DuckDB = testFunction(src = srcDuckdb, key, value, query, fields), replications = 3L ) # 2025-07-12 with M3 hardware, databases via homebrew result[rev(order(result$elapsed)), c("test", "replications", "elapsed")] # test replications elapsed # 4 CouchDB 3 48.93 # 3 Elastic 3 25.00 # 1 MongoDB 3 2.11 # 5 PostgreSQL 3 1.51 # 6 DuckDB 3 0.92 # 2 SQLite 3 0.65 message(R.version$version.string) # R version 4.5.1 RC (2025-06-05 r88281) pkgs <- c("nodbi", "RSQLite", "duckdb", "RPostgres", "mongolite", "elastic", "sofa") for (pkg in pkgs) message(pkg, ": ", packageVersion(pkg)) # nodbi: 0.13.1 # RSQLite: 2.4.1 # duckdb: 1.3.2 # RPostgres: 1.4.8 # mongolite: 4.0.0 # elastic: 1.2.0 # sofa: 0.4.0 ``` ## Testing {#testing} Every database backend is subjected to identical tests, see [core-nodbi.R](https://github.com/ropensci/nodbi/blob/master/tests/testthat/core-nodbi.R). ```{r testing_and_coverage} # 2025-07-12 suppressMessages(testthat::test_local()) # ✔ | F W S OK | Context # ✔ | 2 175 | couchdb [46.0s] # ✔ | 1 174 | duckdb [3.8s] # ✔ | 2 173 | elastic [37.9s] # ✔ | 2 173 | mongodb [3.9s] # ✔ | 176 | postgres [4.8s] # ✔ | 177 | sqlite [3.7s] # ══ Results ═══════════════════════════════ # Duration: 100.2 s # ── Skipped tests (7) ───────────────────── # • Testing for auto disconnect and shutdown not relevant (3): # test-couchdb.R:26:3, test-elastic.R:21:3, # test-mongodb.R:24:3 # • Testing for parallel writes not possible or implemented (4): # test-couchdb.R:26:3, test-duckdb.R:22:3, # test-elastic.R:21:3, test-mongodb.R:24:3 # # [ FAIL 0 | WARN 0 | SKIP 7 | PASS 1048 ] covr::package_coverage(path = ".", type = "tests") # nodbi Coverage: 93.42% # R/src_postgres.R: 82.19% # R/src_duckdb.R: 84.00% # R/zzz.R: 86.67% # R/query.R: 92.92% # R/update.R: 94.40% # R/src_mongo.R: 95.00% # R/get.R: 95.79% # R/create.R: 96.25% # R/delete.R: 98.96% # R/exists.R: 100.00% # R/list.R: 100.00% # R/src_couchdb.R: 100.00% # R/src_elastic.R: 100.00% # R/src_sqlite.R: 100.00% ``` ## Notes - Please [report any issues or bugs](https://github.com/ropensci/nodbi/issues). - License: MIT - Get citation information for `nodbi` in R doing `citation(package = 'nodbi')` - Please note that this package is released with a [Contributor Code of Conduct](https://ropensci.org/code-of-conduct/). By contributing to this project, you agree to abide by its terms. - Support for redis has been removed since version 0.5.

Owner

  • Name: rOpenSci
  • Login: ropensci
  • Kind: organization
  • Email: info@ropensci.org
  • Location: Berkeley, CA

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "@type": "SoftwareSourceCode",
  "identifier": "nodbi",
  "description": "Simplified JSON document database access and manipulation, providing a common API across supported 'NoSQL' databases 'Elasticsearch', 'CouchDB', 'MongoDB' as well as 'SQLite/JSON1', 'PostgreSQL', and 'DuckDB'.",
  "name": "nodbi: 'NoSQL' Database Connector",
  "relatedLink": [
    "https://docs.ropensci.org/nodbi/",
    "https://CRAN.R-project.org/package=nodbi"
  ],
  "codeRepository": "https://github.com/ropensci/nodbi",
  "issueTracker": "https://github.com/ropensci/nodbi/issues",
  "license": "https://spdx.org/licenses/MIT",
  "version": "0.13.1",
  "programmingLanguage": {
    "@type": "ComputerLanguage",
    "name": "R",
    "url": "https://r-project.org"
  },
  "runtimePlatform": "R version 4.5.1 RC (2025-06-05 r88281)",
  "provider": {
    "@id": "https://cran.r-project.org",
    "@type": "Organization",
    "name": "Comprehensive R Archive Network (CRAN)",
    "url": "https://cran.r-project.org"
  },
  "author": [
    {
      "@type": "Person",
      "givenName": "Ralf",
      "familyName": "Herold",
      "email": "ralf.herold@mailbox.org",
      "@id": "https://orcid.org/0000-0002-8148-6748"
    },
    {
      "@type": "Person",
      "givenName": "Scott",
      "familyName": "Chamberlain",
      "@id": "https://orcid.org/0000-0003-1444-9135"
    },
    {
      "@type": "Person",
      "givenName": "Rich",
      "familyName": "FitzJohn"
    },
    {
      "@type": "Person",
      "givenName": "Jeroen",
      "familyName": "Ooms"
    }
  ],
  "copyrightHolder": [
    {
      "@type": "Person",
      "givenName": "Ivan",
      "familyName": "Tarbakou"
    }
  ],
  "maintainer": [
    {
      "@type": "Person",
      "givenName": "Ralf",
      "familyName": "Herold",
      "email": "ralf.herold@mailbox.org",
      "@id": "https://orcid.org/0000-0002-8148-6748"
    }
  ],
  "softwareSuggestions": [
    {
      "@type": "SoftwareApplication",
      "identifier": "sofa",
      "name": "sofa",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=sofa"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "elastic",
      "name": "elastic",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=elastic"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "mongolite",
      "name": "mongolite",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=mongolite"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "RSQLite",
      "name": "RSQLite",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=RSQLite"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "duckdb",
      "name": "duckdb",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=duckdb"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "RPostgres",
      "name": "RPostgres",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=RPostgres"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=testthat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "withr",
      "name": "withr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=withr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "callr",
      "name": "callr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=callr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "webfakes",
      "name": "webfakes",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=webfakes"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=knitr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "rmarkdown",
      "name": "rmarkdown",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rmarkdown"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "tibble",
      "name": "tibble",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=tibble"
    }
  ],
  "softwareRequirements": {
    "1": {
      "@type": "SoftwareApplication",
      "identifier": "R",
      "name": "R",
      "version": ">= 3.4.0"
    },
    "2": {
      "@type": "SoftwareApplication",
      "identifier": "stringi",
      "name": "stringi",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=stringi"
    },
    "3": {
      "@type": "SoftwareApplication",
      "identifier": "jsonlite",
      "name": "jsonlite",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=jsonlite"
    },
    "4": {
      "@type": "SoftwareApplication",
      "identifier": "uuid",
      "name": "uuid",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=uuid"
    },
    "5": {
      "@type": "SoftwareApplication",
      "identifier": "jqr",
      "name": "jqr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=jqr"
    },
    "6": {
      "@type": "SoftwareApplication",
      "identifier": "DBI",
      "name": "DBI",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=DBI"
    },
    "7": {
      "@type": "SoftwareApplication",
      "identifier": "V8",
      "name": "V8",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=V8"
    },
    "8": {
      "@type": "SoftwareApplication",
      "identifier": "R.utils",
      "name": "R.utils",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=R.utils"
    },
    "SystemRequirements": null
  },
  "applicationCategory": "Databases",
  "isPartOf": "https://ropensci.org",
  "keywords": [
    "database",
    "MongoDB",
    "Elasticsearch",
    "CouchDB",
    "SQLite",
    "PostgreSQL",
    "DuckDB",
    "NoSQL",
    "JSON",
    "documents",
    "rstats",
    "nosql",
    "couchdb",
    "mongodb",
    "elasticsearch",
    "r",
    "r-package",
    "sqlite",
    "postgresql"
  ],
  "fileSize": "667.632KB",
  "releaseNotes": "https://github.com/ropensci/nodbi/blob/master/NEWS.md",
  "readme": "https://github.com/ropensci/nodbi/blob/master/README.md",
  "contIntegration": [
    "https://github.com/ropensci/nodbi/actions?query=workflow%3AR-CMD-check",
    "https://app.codecov.io/gh/rfhb/nodbi"
  ],
  "developmentStatus": "https://lifecycle.r-lib.org/articles/stages.html#stable"
}

GitHub Events

Total
  • Create event: 5
  • Issues event: 1
  • Release event: 3
  • Watch event: 3
  • Issue comment event: 2
  • Push event: 30
Last Year
  • Create event: 5
  • Issues event: 1
  • Release event: 3
  • Watch event: 3
  • Issue comment event: 2
  • Push event: 30

Committers

Last synced: about 2 years ago

All Time
  • Total Commits: 470
  • Total Committers: 7
  • Avg Commits per committer: 67.143
  • Development Distribution Score (DDS): 0.389
Past Year
  • Commits: 136
  • Committers: 2
  • Avg Commits per committer: 68.0
  • Development Distribution Score (DDS): 0.103
Top Committers
Name Email Commits
Ralf Herold r****d@g****t 287
Scott Chamberlain m****s@g****m 158
Ralf Herold r****d@e****u 14
Rich FitzJohn r****n@g****m 7
DRTAG m****a@g****m 2
rOpenSci Bot m****t@g****m 1
Jeroen Ooms j****s@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 27
  • Total pull requests: 19
  • Average time to close issues: over 2 years
  • Average time to close pull requests: about 1 month
  • Total issue authors: 8
  • Total pull request authors: 4
  • Average comments per issue: 2.52
  • Average comments per pull request: 2.16
  • Merged pull requests: 16
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: 13 days
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 2.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • sckott (13)
  • richfitz (5)
  • rfhb (4)
  • GitHunter0 (1)
  • JARS3N (1)
  • wolkym (1)
  • jeroen (1)
  • harryprince (1)
Pull Request Authors
  • rfhb (15)
  • sckott (2)
  • cboettig (1)
  • drtagkim (1)
Top Labels
Issue Labels
bug (2) question (2) enhancement (2) upstream (1) documentation (1)
Pull Request Labels
bug (1)

Packages

  • Total packages: 1
  • Total downloads:
    • cran 1,102 last-month
  • Total docker downloads: 188,146
  • Total dependent packages: 2
  • Total dependent repositories: 2
  • Total versions: 34
  • Total maintainers: 1
cran.r-project.org: nodbi

'NoSQL' Database Connector

  • Versions: 34
  • Dependent Packages: 2
  • Dependent Repositories: 2
  • Downloads: 1,102 Last month
  • Docker Downloads: 188,146
Rankings
Stargazers count: 4.9%
Forks count: 9.7%
Downloads: 11.5%
Average: 11.8%
Dependent packages count: 13.2%
Dependent repos count: 19.5%
Maintainers (1)
Last synced: 6 months ago

Dependencies

DESCRIPTION cran
  • R >= 2.10 depends
  • DBI * imports
  • RPostgres * imports
  • RSQLite >= 2.2.4 imports
  • elastic >= 1.0.0 imports
  • jqr * imports
  • jsonify * imports
  • jsonlite * imports
  • mongolite >= 1.6 imports
  • sofa >= 0.3.0 imports
  • stringi * imports
  • uuid * imports
  • testthat * suggests
  • withr * suggests
.github/workflows/check-standard.yml actions
  • actions/checkout v3 composite
  • ankane/setup-postgres v1 composite
  • getong/elasticsearch-action v1.2 composite
  • iamssen/couchdb-github-action master composite
  • r-lib/actions/check-r-package v2 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
  • supercharge/mongodb-github-action v1.10.0 composite