What Are Some Schema Design Decisions to Consider for Storing Changes of a Base Object Without Updating the Base Object

Hi everyone, I have a question about some design decisions I could make for data modeling. Let’s say that I have two collections: Project and Template. Project is able to reference the Template collection. Now in terms of the usage, a user can create a Project workspace, and it can reference the Template collection as a base for generating the layout of the page.

However, I want the user to have the flexibility of updating the base Template to provide more customization to the Project workspace, but I don’t want the base Template to be modified with the new data. Want I want is to store changes of the base Template, whether they add, update, or delete data, in the database so that when the Project collection is called, the base Template data will be merged with the modifications that the user made to the base Template.

What I’m looking for is some strategies to how I can model the data to handle this certain feature. I’m also open to strategies that would involve some post-processing working in the backend (not involving Mongodb). Hope the context makes sense and thanks in advance!

To accomplish some think like this, I would experiment with

I would link the master template and its derivatives in such a way that I can $graphLookup.
I would then $mergeObject the result of $graphLookup into a computed template.