function getLookups( next) {
        getDb(get, next);
        function get(db){

            var lookupCollectionNames = [
                'OrderStatus',
                'Product',
                'ProductOption',
                'ProductSize'
            ];
            var failed = false;
            var lookups = {};
            var queryCountDown = 0;

            lookupCollectionNames.forEach(getAll);

            function getAll(collectionName) {
                queryCountDown += 1;
                var entityType = collectionName;
                db.collection( collectionName,{strict: true}, collectionCallback );

                function collectionCallback(err, collection) {
                    if (err) {
                        failed = true;
                        err = { statusCode: 404, message: "Unable to locate: " + collectionName, error: err };
                        next(err);
                    } else {
                        if (!failed){
                            collection.find().toArray(findCallback);
                        }
                    }
                }

                function findCallback(err, results) {
                    queryCountDown -= 1;
                    if (failed) {
                      // already failed, forget it
                    } else if (err) {
                        failed = true;
                        next(err);
                    } else {
                        results.forEach(function (r) {
                            r.$type = entityType;    //Todo: explain why we add $type
                        });
                        lookups[collectionName] = results;
                        if (queryCountDown === 0) { // last of the queries
                            next(null, lookups);    // we're done
                        }
                    }
                }
            }
        }
    }
lookups query whose result is an object with
several sets of reference ('lookup') entities

@param next {function} next(err, results)