So, I have an application in which there is a unique ID for every document. Changing it by mistake might be dangerous (as other collections are linked using said ID), but I wouldn’t store it in the _id field provided by MongoDB, just in case we realize it needs to be changed in the future.
Is there a way of preventing anyone to edit a field? Like creating an immutable index that can be deleted later if needed?
If not, what would be your approach for this?
Since, you have ruled out using _id field for this purpose, you can think about using Change Streams, which allow tracking changes on a collection’s data. The Change Events describe the fields updated for operationType: 'update' (relevant for your case). While this doesn’t stop anyone from changing a field value, you are sure to get notification of the update or change on a particular field.
Note that Change Streams feature usage requires that your MongoDB cluster is a replica-set or a sharded cluster.
[EDIT ADD]
In case you are using MongoDB NodeJS Driver and Mongoose ODM, there is a feature which allows defining a field as immutable. See SchemaType.prototype.immutable().