see on GitHub

Compare Exchange Metadata


  • RavenDB 5.0 added metadata to compare exchange values.

  • In this page:


Syntax

A compare exchange value's metadata is very similar to a document's metadata.

The metadata can be used to set compare exchange expiration.

The metadata is accessible as a root property of the compare exchange value object:

using (IAsyncDocumentSession session = store.OpenAsyncSession(
                                       new SessionOptions { 
                                           TransactionMode = TransactionMode.ClusterWide 
                                       }))
{
    // Create a new compare exchange value
    var cmpxchgValue = session.Advanced.ClusterTransaction.CreateCompareExchangeValue("key", "value");

    // Add a field to the metadata
    // with a value of type string
    cmpxchgValue.Metadata["Field name"] = "some value";

    // Retrieve metadata as a dictionary
    IDictionary<string, object> cmpxchgMetadata = cmpxchgValue.Metadata;
}

You can send it as a parameter of the Put Compare Exchange Value operation:

// Create some metadata
var cmpxchgMetadata = new MetadataAsDictionary {
                          ["Year"] = "2020" 
                      };

// Create/update the compare exchange value "best"
await documentStore.Operations.SendAsync(
    new PutCompareExchangeValueOperation<User>(
        "best", 
        new User { Name = "Alice" }, 
        0, 
        cmpxchgMetadata));