NAME
Sport::Analytics::NHL::DB - Interface to MongoDB to store NHL reports.
SYNOPSYS
Interface to MongoDB in order to store the semi-structured NHL reports into it. Provides the database handle and most of the bulky database operations. Does not subclass MongoDB - the handle is stored in the class's object.
use Sport::Analytics::NHL::DB;
my $db = Sport::Analytics::NHL::DB->new();
my $team_id = $db->resolve_team_db('San Jose Sharks'); # $team_id becomes 'SJS'.
METHODS
new
-
Constructor. Sets the database connection. Controlled by global variables: * $MONGO_HOST - host of the mongodb server (def. 127.0.0.1) * $MONGO_PORT - port of the mongodb server (def. 27017) * $MONGO_DB - name of the mongo database (def 'hockey') Also, the database can be specified via $ENV{HOCKEYDB_DBNAME} The database handle is stored in the dbh field of the object which is a blessed hashref.
resolve_team_db
-
Resolves a team by a given possible identifier to a normalized 3-letter identifier. The target identifiers are the keys to the %TEAMS hash in Sport::Analytics::NHL::Config.pm (q.v.) Argument: the team identifier/name (e.g. 'Rangers') Returns: the system identifier (e.g. NYR)
insert_schedule
-
Inserts the collected schedule (see Sport::Analytics::NHL::Scraper), initializing the indexes for the schedule collection if necessary. Collections: schedule Arguments: the list of scheduled games with their defined fields Returns: the number of the inserted games
get_existing_game_ids
-
Gets the list of ids of games already in the database Collections: games Arguments: optional - hashref containing the start_season and stop_season of the query Returns: the arrayref of the ids of the existing games
add_game
-
Actually puts the fully prepared boxscore, with set references to other collections, into the database.
Argument: the boxscore Returns: the inserted id
add_game_coaches
-
Adds the coaches of the teams from the boxscore to the database and provides a reference to the added coach in the boxscore.
Argument: the boxscore Returns: void, the coaches names are replaced with OIDs in the boxscore.
add_game_player
-
Adds a player from the boxscore to the database, and sets his team, injury, start and captaincy statuses and histories.
Arguments: * the player hashref as parsed by Sport::Analytics::NHL::Report::Player * the game boxscore * the player's team name * [optional] overwrite force flag Returns: void
add_new_coach
-
Initializes a new entry for a coach in the database.
Arguments: * the coaches database collection * the boxscore * the team of the coach from the boxscore Returns: the OID of the coach
add_new_player
-
Initializes a new entry for a player in the database.
Arguments: * the players database collection * the player parsed by Sport::Analytics::Report::Player (q.v.) Returns: the id of the inserted player
create_event
-
Creates a new event in the database, referencing all relevant fields by their own database catalogs. The event is inserted twice: first, with only least indexing information into the general 'events' collection; second, with the particular information in the event type's collection.
Argument: the event from the boxscore Returns: the inserted event's id.
create_location
-
Creates a new location (stadium/arena) entry in the database by its name and capacity.
Argument: the location information from the boxscore Returns: the location entry as inserted.
ensure_event_indices
-
Ensures the correct extra indices for the event's type collection.
Arguments: * the event * the event's collection Returns: void
ensure_index
-
Wraps around the new MongoDB collection index creation routine, replacing its own ensure_index() method.
Arguments: * the collection * the index mapping as expected by create_one or create_many * [optional] - whether to reapply the index on non-empty collection Returns: the status of the index creation
get_catalog_entry
-
Creates if necessary a catalog of NHL event subtypes (e.g. zones, penalties, stop reasons) by the name of the event subtype as normalized by the vocabulary in Sport::Analytics::NHL::Config (q.v.), and fetches the corresponding entry.
Arguments: * the catalog's name to operate upon * the name of the catalog item
get_collection
-
A wrapper over $self->{dbh}->get_collection();
remove_game
-
Removes a game and references to it from the Mongo DB
Arguments: the game Returns: void Caveat: removal of all traces is not guaranteed.
set_injury_history
-
Sets the injury history of the player in the database. Either the current status is extended, or if the status changed, a new chapter is added.
Arguments: * player's db entry * the boxscore * the injury status Returns: void
set_player_statuses
-
Sets the status (captain, assistant captain) history of the player in the database. Either the current status (with the same team) is extended, or if the status changed, a new chapter is added.
Arguments: * player's db entry * player's boxscore entry * the boxscore * the player's team name Returns: void
set_player_teams
-
Sets the team history of the player in the database. Either the current team is extended, or if the team changed, a new chapter is added.
Arguments: * player's db entry * the boxscore * the team Returns: void
This function is similar to the two above and all of them may be merged into one.
wipe_game_from_player_history
-
During removal of game data, wipes a game from player's history.
Arguments: * player's db entry * game's db entry Returns: void
bootstrap_divisions_conferences
-
Bootstraps the NHL divisions and conferences from the Sport::Analytics::NHL::Config definitions
Arguments: force overwrite flag (optional) Returns: void
bootstrap_teams
-
Bootstraps the NHL teams from the Sport::Analytics::NHL::Config definitions
Arguments: force overwrite flag (optional) Returns: void
ensure_shift_indices
-
Ensures the custom indices for the shifts collection.
Arguments: none Returns: void
find_items_with_games
-
Returns the iterator of items by given game ids. Mostly used by the website, but should get the usage expanded.
Arguments: the hashref of: collection of the items condition to apply [optional] id_field of the collection [optional] game_ids to look up [optional] return_fields to return [optional] count whether to return the iterator or the count Returns: the iterator or the count of matching documents.
find_player
-
Finds a player by given name, team, season, stage
Arguments: the player name the team the season the stage Returns: player's ID if the player is unambiguously found dies if more than one players are found warns if no players are found
get_catalog_condition
-
Get a catalog item's condition for a search
Arguments: the catalog's name the vocabulary entry name Returns: hashref catalog_name => catalog_item_id
get_item_collection
-
Gets a collection for a given item by name. Expect to be deprecated.
Arguments: the collection itself, or the collection name (optional) Returns: the collection or by default the games collection.
get_item_condition
-
Expands an item condition from vocabulary names to catalog IDs
Arguments: the condition Returns the expanded condition or the original condition if the 'verbatim' keyword was specified.
insert
-
A generic wrapper over the MongoDB::Collection's insert_one / insert_many / replace_one methods. Generates the 'inserted' / 'updated' field as well.
Arguments: the collection the array of items Returns: void
prepare_event
-
Cleans up an event before inserting it into the Mongo DB.
Arguments: the event the events hashref for tracking and debugging Returns: void
update
-
A generic wrapper over the MongoDB::Collection's update_one / update_many methods. Generates the 'updated' field as well.
Arguments: the one_many flag: 1 means many, the collection the filter to update the update arguments Returns: void
insert_injuries
-
Inserts the data structure with injuries as crawled by Sport::Analytics::NHL::Scraper::crawl_injured_players() (q.v.), The players are resolved to the player ids, and the begin and the end of the injuries are marked. If the player is already in an injury status with the same team, the injury "end" property is extended.
Arguments: the injuries structure Returns: void
AUTHOR
More Hockey Stats, <contact at morehockeystats.com>
BUGS
Please report any bugs or feature requests to contact at morehockeystats.com
, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Sport::Analytics::NHL::DB. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Sport::Analytics::NHL::DB
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
https://rt.cpan.org/NoAuth/Bugs.html?Dist=Sport::Analytics::NHL::DB
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
Copyright 2018 More Hockey Stats.
This program is released under the following license: gnu