| design_search {sofa} | R Documentation |
Search design documents
Description
Search design documents
Usage
design_search(
cushion,
dbname,
design,
view,
params = list(),
body = list(),
as = "list",
...
)
design_search_many(cushion, dbname, design, view, queries, as = "list", ...)
Arguments
cushion |
A |
dbname |
(character) Database name. required. |
design |
(character) Design document name. this is the design name
without |
view |
(character) a view, same as |
params |
query parameters. a named list |
body |
same as |
as |
(character) One of list (default) or json |
... |
Curl args passed on to |
queries |
a list of named lists of queries |
Value
JSON as a character string or a list (determined by the
as parameter)
Options to pass to params, body, or queries params
conflicts (logical) Includes conflicts information in response. Ignored if include_docs isn't
TRUE. Default:FALSEdescending (logical) Return the documents in descending by key order. Default:
FALSEendkey,end_key (list) Stop returning records when the specified key is reached. Optional.
end_keyis an alias forendkeyendkey_docid,end_key_doc_id (character) Stop returning records when the specified document ID is reached. Requires endkey to be specified for this to have any effect. Optional.
end_key_doc_idis an alias forendkey_docidgroup (logical) Group the results using the reduce function to a group or single row. Default:
FALSEgroup_level (integer) Specify the group level to be used. Optional
include_docs (logical) Include the associated document with each row. Default:
FALSE.attachments (logical) Include the Base64-encoded content of attachments in the documents that are included if include_docs is
TRUE. Ignored if include_docs isn'tTRUE. Default:FALSEatt_encoding_info (logical) Include encoding information in attachment stubs if include_docs is
TRUEand the particular attachment is compressed. Ignored if include_docs isn'tTRUE. Default:FALSE.inclusive_end (logical) Specifies whether the specified end key should be included in the result. Default:
TRUEkey (list) Return only documents that match the specified key. Optional
keys (list) Return only documents where the key matches one of the keys specified in the array. Optional
limit (integer) Limit the number of the returned documents to the specified number. Optional
reduce (logical) Use the reduction function. Default:
TRUEskip (integer) Skip this number of records before starting to return the results. Default: 0
sorted (logical) Sort returned rows (see Sorting Returned Rows). Setting this to
FALSEoffers a performance boost. The total_rows and offset fields are not available when this is set toFALSE. Default:TRUEstale (character) Allow the results from a stale view to be used. Supported values: ok and update_after. Optional
startkey,start_key (list) Return records starting with the specified key. Optional.
start_keyis an alias for startkeystartkey_docid,start_key_doc_id (character) Return records starting with the specified document ID. Requires startkey to be specified for this to have any effect. Optional.
start_key_doc_idis an alias forstartkey_docidupdate_seq (logical) Response includes an update_seq value indicating which sequence id of the database the view reflects. Default:
FALSE
References
https://docs.couchdb.org/en/latest/api/ddoc/views.html
Examples
## Not run:
user <- Sys.getenv("COUCHDB_TEST_USER")
pwd <- Sys.getenv("COUCHDB_TEST_PWD")
(x <- Cushion$new(user=user, pwd=pwd))
file <- system.file("examples/omdb.json", package = "sofa")
strs <- readLines(file)
## create a database
if ("omdb" %in% db_list(x)) {
invisible(db_delete(x, dbname="omdb"))
}
db_create(x, dbname='omdb')
## add the documents
invisible(db_bulk_create(x, "omdb", strs))
# Create a view, the easy way, but less flexible
design_create(x, dbname='omdb', design='view1', fxnname="foobar1")
design_create(x, dbname='omdb', design='view2', fxnname="foobar2",
value="doc.Country")
design_create(x, dbname='omdb', design='view5', fxnname="foobar3",
value="[doc.Country,doc.imdbRating]")
design_create_(x, dbname='omdb', design='view6', fxnname="foobar4",
fxn = "function(doc){emit(doc._id,doc.Country)}")
# Search using a view
compact <- function(l) Filter(Negate(is.null), l)
res <- design_search(x, dbname='omdb', design='view2', view ='foobar2')
head(
do.call(
"rbind.data.frame",
Filter(
function(z) length(z) == 2,
lapply(res$rows, function(x) compact(x[names(x) %in% c('id', 'value')]))
)
)
)
res <- design_search(x, dbname='omdb', design='view5', view = 'foobar3')
head(
structure(do.call(
"rbind.data.frame",
lapply(res$rows, function(x) x$value)
), .Names = c('Country', 'imdbRating'))
)
# query parameters
## limit
design_search(x, dbname='omdb', design='view5', view = 'foobar3',
params = list(limit = 5))
## limit and skip
design_search(x, dbname='omdb', design='view5', view = 'foobar3',
params = list(limit = 5, skip = 3))
## with start and end keys
### important: the key strings have to be in JSON, so here e.g.,
### need to add escaped double quotes
res <- design_search(
cushion = x,
dbname = 'omdb',
design = 'view6',
view = 'foobar4',
params = list(
startkey = "\"c25bbf4fef99408b3e1115374a03f642\"",
endkey = "\"c25bbf4fef99408b3e1115374a040f11\""
)
)
# POST request
ids <- vapply(db_alldocs(x, dbname='omdb')$rows[1:3], "[[", "", "id")
res <- design_search(x, dbname='omdb', design='view6', view = 'foobar4',
body = list(keys = ids), verbose = TRUE)
res
# Many queries at once in a POST request
queries <- list(
list(keys = ids),
list(limit = 3, skip = 2)
)
design_search_many(x, 'omdb', 'view6', 'foobar4', queries)
## End(Not run)