You are currently browsing legacy 5.0 version of documentation. Click here to switch to the newest 5.1 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Patch Time Series



Patching Using session.Advanced.Defer

  • Defer is used for patching in general, not necessarily for time series data patching.
  • To patch time series data, you need to customize the JavaScript that Defer uses.
  • Learn more about time series JavaScript here.

Syntax

  • PatchCommandData

    • Definition
      public PatchCommandData(string id, string changeVector, 
          PatchRequest patch, PatchRequest patchIfMissing)
      Learn more about PatchCommandData here.
  • PatchRequest

    • Definition
      private class PatchRequest
      {
          // Patching script
          public string Script { get; set; }
          // Values that can be used by the patching script
          public Dictionary<string, object> Values { get; set; }
          //...
      }
      Learn more about PatchRequest here.

Usage Flow

  • Open a session
  • Call session.Advanced.Defer and pass it a PatchCommandData instance.
  • Pass the PatchCommandData constructor method -
    • the document ID
    • the change vector (or null)
    • a PatchRequest instance with a JavaScript that appends or removes time series entries.
  • Call session.SaveChanges() to perform the patch.

Usage Samples

  • In this sample, we pass Defer a script that appends a document 100 time series entries with random heart rate values.

    var baseline = DateTime.Today;
    
    // Create arrays of timestamps and random values to patch
    List<double> values = new List<double>();
    List<DateTime> timeStamps = new List<DateTime>();
    
    for (var cnt = 0; cnt < 100; cnt++)
    {
        values.Add(68 + Math.Round(19 * new Random().NextDouble()));
        timeStamps.Add(baseline.AddSeconds(cnt));
    }
    
    session.Advanced.Defer(new PatchCommandData("users/1-A", 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();
  • In this sample, we remove a range of 50 time series entries from a document.

    // Delete time-series entries
    session.Advanced.Defer(new PatchCommandData("users/1-A", null,
        new PatchRequest
        {
            Script = @"timeseries(this, $timeseries)
                     .delete(
                        $from, 
                        $to
                      );",
            Values =
            {
                { "timeseries", "HeartRates" },
                { "from", baseline.AddSeconds(0) },
                { "to", baseline.AddSeconds(49) }
            }
        }, null));
    session.SaveChanges();