NAME

MongoDBI - A proper ODM (Object-Document-Mapper) for MongoDB

VERSION

version 0.0.12

SYNOPSIS

... in CDDB.pm

package CDDB;

use MongoDBI;

app {

    # shared mongodb connection
    database => {
        name => 'mongodbi_cddb',
        host => 'mongodb://localhost:27017'
    },

    # load child doc classes
    classes => {
        self => 1, # loads CDDB::*
        load => ['Other::Namespace']
    }

};

1;

... in CDDB/Album.pm

package CDDB::Album;

use MongoDBI::Document;

# collection name
store 'albums';

# required fields
key 'title',    is_str,  is_req;
key 'released', is_date, is_req;

# optional fields
key 'rating', is_int, default => 1;

# embedded documents
embed 'tracks', class => 'CDDB::Track', type => 'multiple';

# related artist document
has_one 'band', class => 'CDDB::Artist';

# stored query
filter 'top_rated' => sub {
    
    my ($filter, $self, @args) = @_;
    
    $filter->where('rating$gte' => 5 )
    
};

1;

... and finally in your script.pl

use DateTime;

my $cddb = CDDB->new;

my $cds  = $cddb->class('album'); # grabs CDDB::Album

my $cd = $cds->new(
    title    => 'Just doin my job boss',
    released => DateTime->now
);

$cd->insert;

# search using stored query (aka filter) and loop
$cds->search('top_rated')->foreach_document(sub{    
    print shift->{title}, "\n"
});

DESCRIPTION

Why MongoDB? "MongoDB has the best features of document, key/value and relational databases."

MongoDBI is an Object-Document-Mapper (ODM) for MongoDB. It allows you to create Moose-based classes to interact with MongoDB databases. Born out of the frustration of waiting for someone else to create a proper MongoDB modeling framework, I decided to bite-the-bullet and try my hand at it.

At-a-glance, most will enjoy MongoDBI for its ability to easily model classes while leveraging the power of MongoDB's schemaless and expeditious document-based design, dynamic queries, and atomic modifier operations.

Also noteworthy is MongoDBI's ease-of-use, chainable search facilities (filters), automated indexing, moose-integration (inheritance support, etc), lean document updates via dirty field tracking, and ability for each class to be configured to use a different database and connection, etc.

This class, MongoDBI, sub-classes MongoDBI::Application, please review that module for more usage information.

AUTHOR

Al Newkirk <awncorp@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by awncorp.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.