Upon closer inspection, it appears my naming of 'build' was wrong, in a sense. Each collection gets built by the call to .all, which builds a cached version of the collection in memory.  As with any cache, things get added to the main data store that don't exist in the cache. So if a .find_* fails to find an item, it's assumed that the cache needs to be updated. The fastest way to do that (assuming lots of data to pull back) is to do a find on the main data store for the specific item needed, instead of refreshing the full cache. Bad approach IMO, especially from the standpoint of maintenance.

I think we need to defer this until the next iteration, and have a discussion around how we want to manage the interaction at the model layer between the user and these collections. Specifically, how do we handle caching, cache invalidation/freshening, and operations against members of the collection. Then we can take a consistent approach with all collections.