NAME
Mongol - Basic Mongo ODM for Moose objects
SYNOPSIS
package Address {
use Moose;
extends 'Mongol::Base';
has 'street' => (
is => 'ro',
isa => 'Str',
required => 1,
);
has 'number' => (
is => 'ro',
isa => 'Int',
required => 1,
);
__PACKAGE__->meta()->make_immutable();
}
package Person {
use Moose;
extends 'Mongol::Base';
with 'Mongol::Entity';
has 'first_name' => (
is => 'ro',
isa => 'Str',
required => 1,
);
has 'last_name' => (
is => 'ro',
isa => 'Str',
required => 1
);
has 'age' => (
is => 'ro',
isa => 'Int',
required => 1,
);
has 'addresses' => (
is => 'ro',
isa => 'ArrayRef[Address]',
default => sub { [] },
traits => [ qw( Array ) ],
handles => {
add_address => 'push',
}
);
sub to_string {
my $self = shift();
sprintf( '%s %s', $self->first_name(), $self->last_name() );
}
__PACKAGE__->meta()->make_immutable();
}
...
package main {
use MongoDB;
use Mongol;
my $connection = MongoDB->connect( 'mongodb://localhost:27017' );
Mongol->map_entities( $connection,
'Person' => 'test.people',
'Product' => 'test.product',
);
my $person = Person->new(
{
id => 616742,
first_name => 'John',
last_name => 'Doe',
age => 30,
}
);
my $home = Address->new(
{
street => 'Main St.',
number => 123,
}
);
$person->add( $address );
$person->save();
my $clone = Person->retrieve( 616742 );
$clone->age( 31 );
$clone->save();
my $cursor = Person->find( { age => { '$gt' => 25 } } );
while( my $person = $cursor->next() ) {
printf( "%s : %d\n",
$person->to_string(),
$person->age()
);
$person->remove();
}
Person->drop();
}
DESCRIPTION
Mongol is a basic MongoDB ODM for Moose objects.
METHODS
map_entities
Mongol->map_entities( $mongo_connection,
'My::Moose::Object' => 'database.collection'
)
Maps a Moose class with the Mongol::Entity applied to a MongoDB collection. You can add multiple entities for the same collection if you want to map object partially.
AUTHOR
Tudor Marghidanu <tudor@marghidanu.com>
SEE ALSO
LICENSE
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.