Given I have two records, PottsA age 24 and PottsB age 30, the change feed processor returns the two records:
{
"id": "PottsA",
"FirstName": "Andrew",
"LastName": "Potts",
"Age": 24,
"_rid": "As5lALWJOgABAAAAAAAAAA==",
"_self": "dbs/As5lAA==/colls/As5lALWJOgA=/docs/As5lALWJOgABAAAAAAAAAA==/",
"_etag": "\"00008e03-0000-0000-0000-59a53b790000\"",
"_attachments": "attachments/",
"_ts": 1504000889,
"_lsn": 8
}
{
"id": "PottsB",
"FirstName": "Andrew",
"LastName": "Potts",
"Age": 30,
"_rid": "As5lALWJOgADAAAAAAAAAA==",
"_self": "dbs/As5lAA==/colls/As5lALWJOgA=/docs/As5lALWJOgADAAAAAAAAAA==/",
"_etag": "\"00009203-0000-0000-0000-59a552970000\"",
"_attachments": "attachments/",
"_ts": 1504006807,
"_lsn": 10
}
If I Upsert PottsB to age 50,
await client.UpsertDocumentAsync(
UriFactory.CreateDocumentCollectionUri(databaseName, collectionName),
new Person
{
Id = "PottsB",
FirstName = "Andrew",
LastName = "Potts",
Age = 50
});
Then the change feed detects the change:
ID: PottsB
{
"id": "PottsB",
"FirstName": "Andrew",
"LastName": "Potts",
"Age": 50,
"_rid": "As5lALWJOgADAAAAAAAAAA==",
"_self": "dbs/As5lAA==/colls/As5lALWJOgA=/docs/As5lALWJOgADAAAAAAAAAA==/",
"_etag": "\"00009303-0000-0000-0000-59a553860000\"",
"_attachments": "attachments/",
"_ts": 1504007046,
"_lsn": 11
}
However, if I reset the checkpoint back to null:
Only two results are returned. Only the latest change to PottsB is returned.
ID: PottsA
{
"id": "PottsA",
"FirstName": "Andrew",
"LastName": "Potts",
"Age": 24,
"_rid": "As5lALWJOgABAAAAAAAAAA==",
"_self": "dbs/As5lAA==/colls/As5lALWJOgA=/docs/As5lALWJOgABAAAAAAAAAA==/",
"_etag": "\"00008e03-0000-0000-0000-59a53b790000\"",
"_attachments": "attachments/",
"_ts": 1504000889,
"_lsn": 8
}
ID: PottsB
{
"id": "PottsB",
"FirstName": "Andrew",
"LastName": "Potts",
"Age": 50,
"_rid": "As5lALWJOgADAAAAAAAAAA==",
"_self": "dbs/As5lAA==/colls/As5lALWJOgA=/docs/As5lALWJOgADAAAAAAAAAA==/",
"_etag": "\"00009303-0000-0000-0000-59a553860000\"",
"_attachments": "attachments/",
"_ts": 1504007046,
"_lsn": 11
}
Thus the change feed does not provide a list of all of the changes that took place, just the final changes to the document.
To have an immutable history of changes to a document (e.g. in an event sourcing scenario) each change must have a unique document reference.
Simply appending changes to a document itself will not provide an immutable history.