Given the requirements as stated, you'll be best served by serving the data as a numerical value. There are far more query and aggregation operators that would be easily used for a numeric value than the few other options that are available.
While you could store the period as a string, it would need to be consistently zero padded to sort correctly. With a string, you could only effectively do exact matches and range queries (find all that are "0030"
or between "0015"
and "0045"
for example).
While you could also store the start and end times and try to calculate the period, it adds unnecessary complication to queries, and in fact may make some types of queries only possible using the aggregation framework. You might find some of the ideas here interesting depending on your needs as well.
The absolute performance difference between any option where the time length is directly stored as a value rather than computed is not likely to be measurable, as they would consume nearly the same amount of space for each option. If you're concerned about absolute disk space usage, I'd suggest you consider using shorter field names. Every document contains the full field name. Some drivers for Mongo provide a handy way of using an alias for field names (by keeping the name you use in code friendly and using a shortened version n the stored document).
I'd go with storing a integer numeric value that best suits the maximum length of time you'll encounter. You can add an index if it's frequently queried, and easily convert it on the client into something more human friendly.