Structuring change history data in MongoDB / NoSQL
As per @DANIEL WATROUS Blog here The size of documents and the frequency with which they are changed must factor in to the retention of historical data.


  Should I log an entire chart with all the items as a single document,
  every time there is a change? (Although I read there may be a limit on
  document size, so this could be a problem.)


As per your JSON code

{
    {"Id": 1},
    {"Title": "Test Chart"},
    {"Items": [
        {
            "Id": 222,
            "Title": "Test Item",
            "Price": 112.34
        }
    ]
}}


As MongoDB BOLhere The maximum BSON document size is 16 megabytes.

Each document in MongoDB has a specifically allocated size when it is created. Updates that increase the size of the document must allocate a new document large enough to accommodate the updated document on disk and move the document. This can be an expensive operation to perform, especially at high volume.


  Should I log Chart changes as one type of document and Chart Item
  changes as a separate type of document? This would allow me to store
  changes to chart items as a single "line item" document without having
  to save the entire Chart every time there is a change to a single
  chart item.


There are a few options when it comes to dealing with uniquely identifying items data. One is to calculate a unique value at the time an object is placed in history. This could be a combination of the top level object ID and a sequential version number. Another is to generate a hash when the object is loaded. The problem with the second approach is that queries for specific date objects become more complex.

For your further ref here