In some cases such as the stores example, the second field for ‘storesId’ is present because the store is actually represented by a human-readable string versus an ObjectId. This can simplify the query on the application side as the person querying is then searching a list of strings that meaningfully represent various stores/shops.
That said you could overload the ObjectID by making it either represent the StoreID but this will add a degree of complexity to your indexes and they must be managed.
In this example, creating a storeId field does not explicitly call for or create a second index. It might be useful to add depending on the most frequent queries used by the application but it may not be necessary.
In many cases, several indexes are required in a collection to ensure that the frequently requested queries can be serviced where the query shape (fields requested) differ. Questioning whether each index is required is a good practice and I think you are on the right approach to building performant MongoDB indexing strategies for your application.
Hope this helps explain it!