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.
rlowdb
is not yet available on CRAN, but you can install
it from GitHub:
::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 = "Alice", age = 30)
)$insert(
dbcollection = "users",
record = list(id = 2, name = "Bob", age = 25)
)
$insert(
dbcollection = "users",
record = list(id = 3, name = "Alice", age = 30)
)
Get all stored data:
$get_data()
db#> $users
#> $users[[1]]
#> $users[[1]]$id
#> [1] 1
#>
#> $users[[1]]$name
#> [1] "Alice"
#>
#> $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
Find a specific record:
$find(collection = "users", key = "id", value = 1)
db#> [[1]]
#> [[1]]$id
#> [1] 1
#>
#> [[1]]$name
#> [1] "Alice"
#>
#> [[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] "Alice"
#>
#> $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:
$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] "Alice"
#>
#> $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] "Alice"
#>
#> $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] "Alice"
#>
#> $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
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
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
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] 3
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
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] "Alice"
#>
#> $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
#>
#>
#>
#> $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] "Alice"
#>
#> $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
#>
#>
#>
#> $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] "Alice"
#>
#> $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
Finally, drop_all
will drop all the
collections
within your DB
:
$drop_all()
db$get_data()
db#> named list()
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(collection, key, value): 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.