Time Series: JavaScript Support
-
With the introduction of time series, RavenDB has extended its JavaScript support to include manipulations involving time series data when patching single or multiple documents.
-
Time series capabilities can be achieved via JavaScript when using the following methods:
- session.Advanced.Defer - perform patch via the Session
- PatchOperation - perform patch via a Store operation
- PatchByQueryOperation - perform query & patch via a Store operation
-
The server treats timestamps passed in the scripts as UTC, no conversion is applied by the client to local time.
-
In this page:
JavaScript time series API methods
The JavaScript time series API includes these methods:
timeseries (doc, name)
Choose a time series by the ID of its owner document and by the series name.
Parameter | Type | Description |
---|---|---|
doc | string or document instance | Document ID, e.g. timeseries('users/1-A', 'StockPrice') e.g. timeseries(this, 'StockPrice') |
name | string | Time Series Name |
timeseries.append
You can use two overloads, to append tagged or untagged time series entries.
timeseries.append (timestamp, values)
timeseries.append (timestamp, values, tag)
Parameter | Type | Description |
---|---|---|
timestamp | DateTime | Timestamp |
values | double[] | Values |
tag | string | Tag |
timeseries.delete (from, to)
Use this method to delete a range of entries from a document.
Parameter | Type | Description |
---|---|---|
from (optional) | DateTime | Entries will be deleted starting at this timestamp (inclusive) Default: DateTime.Min |
to (optional) | DateTime | Entries will be deleted up to this timestamp (inclusive) Default: DateTime.Max |
timeseries.get (from, to)
Use this method to retrieve a range of time series entries.
Parameter | Type | Description |
---|---|---|
from (optional) | DateTime | Get time series entries starting from this timestamp (inclusive) Default: DateTime.Min |
to (optional) | DateTime | Get time series entries ending at this timestamp (inclusive) Default: DateTime.Max |
Return Type:
Values are returned in an array of time series entries, i.e. -
[
{
"Timestamp" : ...
"Tag": ...
"Values": ...
"IsRollup": ...
},
{
"Timestamp" : ...
"Tag": ...
"Values": ...
"IsRollup": ...
}
...
]
Examples
- This example shows a script that appends 100 entries to time series "HeartRates" in document "Users/john".
The script is passed to method session.Advanced.Defer.
var baseTime = DateTime.UtcNow;
// Create arrays of timestamps and random values to patch
var values = new List<double>();
var timeStamps = new List<DateTime>();
for (var i = 0; i < 100; i++)
{
values.Add(68 + Math.Round(19 * new Random().NextDouble()));
timeStamps.Add(baseTime.AddMinutes(i));
}
session.Advanced.Defer(new PatchCommandData("users/john", null,
new PatchRequest
{
Script = @"
var i = 0;
for(i = 0; i < $values.length; i++)
{
timeseries(id(this), $timeseries)
.append (
new Date($timeStamps[i]),
$values[i],
$tag);
}",
Values =
{
{ "timeseries", "HeartRates" },
{ "timeStamps", timeStamps },
{ "values", values },
{ "tag", "watches/fitbit" }
}
}, null));
session.SaveChanges();
- This example shows a script that deletes time series "HeartRates" for documents that match the specified query. The script is passed to the PatchByQueryOperation operation.
PatchByQueryOperation deleteByQueryOp = new PatchByQueryOperation(new IndexQuery
{
Query = @"from Users as u
where u.Age < 30
update
{
timeseries(u, $name).delete($from, $to)
}",
QueryParameters = new Parameters
{
{ "name", "HeartRates" },
{ "from", DateTime.MinValue },
{ "to", DateTime.MaxValue }
}
});
// Execute the operation:
// Time series "HeartRates" will be deleted for all users with age < 30
store.Operations.Send(deleteByQueryOp);