The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
rlowdb
is a lightweight, JSON-based database for R,
inspired by LowDB from
JavaScript. It provides a simple and efficient way to store, retrieve,
update, and delete structured data without the need for a full database
system.
You can install rlowdb
from CRAN
with:
install.packages("rlowdb")
You can also install the development version from Github
with:
::install_github("feddelegrand7/rlowdb") devtools
To start using `rlowdb``, create a new database instance by specifying a JSON file:
library(rlowdb)
<- rlowdb$new("DB.json") db
The insert
method takes two parameters, a
collection
and a record
, think of the
collection
parameter as a table
in the
SQL world. Think of the record
parameter
as a list
of names, each name/value pair representing a
specific column and it’s value.
Add records to a collection:
$insert(
dbcollection = "users",
record = list(id = 1, name = "Ali", age = 30)
)$insert(
dbcollection = "users",
record = list(id = 2, name = "Bob", age = 25)
)
$insert(
dbcollection = "users",
record = list(id = 3, name = "Alice", age = 30)
)
Using the transaction
method, you can insert a set of
records and if an error occurs in the process, a rollback
will be triggered to restore the initial state of the database. Note
that the insertion has to be operated using a function:
$count("users")
db#> [1] 3
$transaction(function() {
db$insert("users", list(name = "Zlatan", age = 40))
db$insert("users", list(name = "Neymar", age = 28))
dbstop("some errors")
$insert("users", list(name = "Ronaldo", age = 30))
db
})#> Error in `value[[3L]]()`:
#> ! Transaction failed: some errors
$count("users")
db#> [1] 3
Get all stored data:
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 30
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
Get data from a specific collection:
$get_data_collection("users")
db#> [[1]]
#> [[1]]$id
#> [1] 1
#>
#> [[1]]$name
#> [1] "Ali"
#>
#> [[1]]$age
#> [1] 30
#>
#>
#> [[2]]
#> [[2]]$id
#> [1] 2
#>
#> [[2]]$name
#> [1] "Bob"
#>
#> [[2]]$age
#> [1] 25
#>
#>
#> [[3]]
#> [[3]]$id
#> [1] 3
#>
#> [[3]]$name
#> [1] "Alice"
#>
#> [[3]]$age
#> [1] 30
Get data from a specific key:
$get_data_key("users", "name")
db#> [1] "Ali" "Bob" "Alice"
Find a specific record:
$find(collection = "users", key = "id", value = 1)
db#> [[1]]
#> [[1]]$id
#> [1] 1
#>
#> [[1]]$name
#> [1] "Ali"
#>
#> [[1]]$age
#> [1] 30
Modify existing records:
$update(
dbcollection = "users",
key = "id",
value = 1,
new_data = list(age = 31)
)
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 31
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
The upsert
methods allows you to update a record if it
exists, otherwise, it will be inserted. Note that the collection and the
key need to exist:
$upsert(
dbcollection = "users",
key = "id",
value = 1,
new_data = list(age = 25)
)
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
$upsert(
dbcollection = "users",
key = "id",
value = 100,
new_data = list(age = 25)
)
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
#>
#>
#> $users[[4]]
#> $users[[4]]$id
#> [1] 100
#>
#> $users[[4]]$age
#> [1] 25
$delete(collection = "users", key = "id", value = 100)
db
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
You can insert many records at once using the
buld_insert
method:
$bulk_insert("users", list(
dblist(id = 1, name = "Antoine", age = 52),
list(id = 2, name = "Omar", age = 23),
list(id = 3, name = "Nabil", age = 41)
))
Find users older than 25:
$query(collection = "users", condition = "age > 25")
db#> [[1]]
#> [[1]]$id
#> [1] 3
#>
#> [[1]]$name
#> [1] "Alice"
#>
#> [[1]]$age
#> [1] 30
#>
#>
#> [[2]]
#> [[2]]$id
#> [1] 1
#>
#> [[2]]$name
#> [1] "Antoine"
#>
#> [[2]]$age
#> [1] 52
#>
#>
#> [[3]]
#> [[3]]$id
#> [1] 3
#>
#> [[3]]$name
#> [1] "Nabil"
#>
#> [[3]]$age
#> [1] 41
Query with multiple conditions:
$query(collection = "users", condition = "age > 20 & id > 1")
db#> [[1]]
#> [[1]]$id
#> [1] 2
#>
#> [[1]]$name
#> [1] "Bob"
#>
#> [[1]]$age
#> [1] 25
#>
#>
#> [[2]]
#> [[2]]$id
#> [1] 3
#>
#> [[2]]$name
#> [1] "Alice"
#>
#> [[2]]$age
#> [1] 30
#>
#>
#> [[3]]
#> [[3]]$id
#> [1] 2
#>
#> [[3]]$name
#> [1] "Omar"
#>
#> [[3]]$age
#> [1] 23
#>
#>
#> [[4]]
#> [[4]]$id
#> [1] 3
#>
#> [[4]]$name
#> [1] "Nabil"
#>
#> [[4]]$age
#> [1] 41
The filter
method allows you to apply a predicate
function (a function that returns TRUE
or
FALSE
) in order to get a specific set of records:
$filter("users", function(x) {
db$age > 30
x
})#> [[1]]
#> [[1]]$id
#> [1] 1
#>
#> [[1]]$name
#> [1] "Antoine"
#>
#> [[1]]$age
#> [1] 52
#>
#>
#> [[2]]
#> [[2]]$id
#> [1] 3
#>
#> [[2]]$name
#> [1] "Nabil"
#>
#> [[2]]$age
#> [1] 41
The search
method allows you to search within
character
fields a specific record. You can also use
regex
:
$search("users", "name", "^Ali", ignore.case = FALSE)
db#> [[1]]
#> [[1]]$id
#> [1] 1
#>
#> [[1]]$name
#> [1] "Ali"
#>
#> [[1]]$age
#> [1] 25
#>
#>
#> [[2]]
#> [[2]]$id
#> [1] 3
#>
#> [[2]]$name
#> [1] "Alice"
#>
#> [[2]]$age
#> [1] 30
$search("users", "name", "alice", ignore.case = TRUE)
db#> [[1]]
#> [[1]]$id
#> [1] 3
#>
#> [[1]]$name
#> [1] "Alice"
#>
#> [[1]]$age
#> [1] 30
The list_collections
method returns the names of the
collections within your DB:
$list_collections()
db#> [1] "users"
Using the count
method, you can get the number of
records a collection has:
$count(collection = "users")
db#> [1] 6
It possible to verify if a collection
, a
key
or a value
exists within your
DB
:
$exists_collection(collection = "users")
db#> [1] TRUE
$exists_collection(collection = "nonexistant")
db#> [1] FALSE
$exists_key(collection = "users", key = "name")
db#> [1] TRUE
$exists_value(
dbcollection = "users",
key = "name",
value = "Alice"
)#> [1] TRUE
$exists_value(
dbcollection = "users",
key = "name",
value = "nonexistant"
)#> [1] FALSE
Using the status
method, you can at each time get some
valuable information about the state of your DB
:
$status()
db#> - database path: DB.json
#> - database exists: TRUE
#> - auto_commit: TRUE
#> - verbose: FALSE
#> - collections: users
#> - schemas: No schema defined
It is possible to clear
a collection. This will remove
all the elements belonging to the collection but not drop the collection
it self:
$insert(collection = "countries", record = list(id = 1, country = "Algeria", continent = "Africa"))
db
$insert(collection = "countries", record = list(id = 1, country = "Germany", continent = "Europe"))
db
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
#>
#>
#> $users[[4]]
#> $users[[4]]$id
#> [1] 1
#>
#> $users[[4]]$name
#> [1] "Antoine"
#>
#> $users[[4]]$age
#> [1] 52
#>
#>
#> $users[[5]]
#> $users[[5]]$id
#> [1] 2
#>
#> $users[[5]]$name
#> [1] "Omar"
#>
#> $users[[5]]$age
#> [1] 23
#>
#>
#> $users[[6]]
#> $users[[6]]$id
#> [1] 3
#>
#> $users[[6]]$name
#> [1] "Nabil"
#>
#> $users[[6]]$age
#> [1] 41
#>
#>
#>
#> $countries
#> $countries[[1]]
#> $countries[[1]]$id
#> [1] 1
#>
#> $countries[[1]]$country
#> [1] "Algeria"
#>
#> $countries[[1]]$continent
#> [1] "Africa"
#>
#>
#> $countries[[2]]
#> $countries[[2]]$id
#> [1] 1
#>
#> $countries[[2]]$country
#> [1] "Germany"
#>
#> $countries[[2]]$continent
#> [1] "Europe"
Now, look what happened when we use the clear
method on
the countries
collection:
$clear("countries")
db
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
#>
#>
#> $users[[4]]
#> $users[[4]]$id
#> [1] 1
#>
#> $users[[4]]$name
#> [1] "Antoine"
#>
#> $users[[4]]$age
#> [1] 52
#>
#>
#> $users[[5]]
#> $users[[5]]$id
#> [1] 2
#>
#> $users[[5]]$name
#> [1] "Omar"
#>
#> $users[[5]]$age
#> [1] 23
#>
#>
#> $users[[6]]
#> $users[[6]]$id
#> [1] 3
#>
#> $users[[6]]$name
#> [1] "Nabil"
#>
#> $users[[6]]$age
#> [1] 41
#>
#>
#>
#> $countries
#> list()
Using the drop
method, one can drop a whole
collection:
$drop(collection = "countries")
db$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Ali"
#>
#> $users[[1]]$age
#> [1] 25
#>
#>
#> $users[[2]]
#> $users[[2]]$id
#> [1] 2
#>
#> $users[[2]]$name
#> [1] "Bob"
#>
#> $users[[2]]$age
#> [1] 25
#>
#>
#> $users[[3]]
#> $users[[3]]$id
#> [1] 3
#>
#> $users[[3]]$name
#> [1] "Alice"
#>
#> $users[[3]]$age
#> [1] 30
#>
#>
#> $users[[4]]
#> $users[[4]]$id
#> [1] 1
#>
#> $users[[4]]$name
#> [1] "Antoine"
#>
#> $users[[4]]$age
#> [1] 52
#>
#>
#> $users[[5]]
#> $users[[5]]$id
#> [1] 2
#>
#> $users[[5]]$name
#> [1] "Omar"
#>
#> $users[[5]]$age
#> [1] 23
#>
#>
#> $users[[6]]
#> $users[[6]]$id
#> [1] 3
#>
#> $users[[6]]$name
#> [1] "Nabil"
#>
#> $users[[6]]$age
#> [1] 41
Finally, drop_all
will drop all the
collections
within your DB
:
$drop_all()
db$get_data()
db#> named list()
You can create at any time a backup for your database using the
backup
method:
$backup("DB_backup.json") db
You can restore a backup database or any preexisting DB using the
restore
method:
$restore("DB_backup.json") db
rlowdb
provides error handling for common issues. For
example, attempting to update a collection that does not exist will
result in an informative error:
$update(
dbcollection = "nonexistant",
key = "id",
value = 1,
new_data = list(age = 40)
) #> Error in `private$.find_index_by_key()` at rlowdb/R/main.R:207:7:
#> ! Error: Collection 'nonexistant' does not exist.
Please note that the ralger project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.