mongoose
mongoose copied to clipboard
Moose to MongoDB object mapper
=pod
=head1 NAME
Mongoose - MongoDB document to Moose object mapper
=head1 SYNOPSIS
package Person;
use Moose;
with 'Mongoose::Document';
has 'name' => ( is => 'rw', isa => 'Str' );
package main;
use Mongoose;
Mongoose->db('mydb');
my $person = Person->new( name => 'Jack' );
$person->save;
$person = Person->find_one({ name => 'Jack' });
say $person->name; # Jack
Person->find({ name => qr/^J/' })->each(sub{
say "Found ", $person->name;
});
$person->delete;
=head1 DESCRIPTION
This is a L<MongoDB> to L<Moose> object mapper. This module allows you to use the full power of MongoDB within your Moose classes, without sacrificing MongoDB's power, flexibility and speed.
It's loosely inspired by Ruby's MongoMapper, which is in turn loosely based on the ActiveRecord pattern.
Start by reading the introduction LMongoose::Intro.
Or proceed directly to the LMongoose::Cookbook for many day-to-day recipes.
=head1 WARNING
Since version 2.00 Mongoose only support the new L<MongoDB> driver v2.x.x which it's now required.
Please let me know if you find anything strange using this new driver.
=head1 METHODS
=head2 db
Sets the current MongoDB connection and/or db name.
Mongoose->db( 'mydb' );
The connection defaults to whatever MongoDB defaults are (typically localhost:27017).
For more control over the connection, C
my $db = Mongoose->db(
host => 'mongodb://somehost:27017',
read_pref_mode => 'secondaryPreferred',
db_name => 'mydb',
username => 'myuser',
password => 'mypass',
ssl => 1
);
This will, in turn, instantiate a LMongoDB::MongoClient and return
a LMongoDB::Database object for C
B<Important>: Mongoose will always defer connecting to Mongo until the last possible moment. This is done to prevent using the MongoDB driver in a forked environment (ie. with a prefork appserver like Starman, Hypnotoad or Catalyst's HTTP::Prefork).
If you prefer to connect while setting the connection string, use one of these options:
Mongoose->db( db_name=>'mydb', -now=>1 ); # connect now
# or by waiting for a return value
my $db = Mongoose->db( 'mydb' );
# or explicitly:
Mongoose->db( 'mydb' );
Mongoose->connect;
You can separate your classes storage on multiple hosts/databases by calling db() several times:
# Default host/database (connect now!)
my $db = Mongoose->db( 'mydb' );
# Other database for some class (defer connection)
Mongoose->db( db_name => 'my_other_db', class => 'Log' );
# Other database on other host for several classes
Mongoose->db(
db_name => 'my_remote_db',
host => 'mongodb://192.168.1.23:27017',
class => [qw/ Author Post /]
);
There is one more level of abstraction called C
# Default host/database for all loaded classes
Mongoose->db( 'mydb' );
# Other database for some classes on a different namespace
Mongoose->db(
db_name => 'other_db',
class => [qw/ Category Post /],
namespace => 'blog_b'
);
=head2 connect
Connects to Mongo using the connection arguments passed to the C
=head2 connection
Returns a connection to the database for the provided class name or the default connection when no class name is provided.
=head2 load_schema
Uses LModule::Pluggable to C
All arguments will be sent to Module::Pluggable's C
package main;
use Mongoose;
# to load a schema from a namespace path:
Mongoose->load_schema( search_path=>'MyApp::Schema' );
This method can be used to shorten class names, aliasing them for convenience if you wish:
Mongoose->load_schema( search_path=>'MyApp::Schema', shorten=>1 );
Will shorten the module name to it's last bit:
MyApp::Schema::Author->new( ... );
# becomes
Author->new( ... );
=head2 disconnect
Unsets the Mongoose connection handler/s.
=head2 namespace
The current namespace. You will use this in case your schema db's are configured using namespaces as described in C
Mongoose->namespace('my_namespace');
It defauls to the "default" namespace.
=head2 class_config
Keep track of document classes config solving aliasing indirection.
=head2 aliased
Keep track of aliasing classes. Useful to retrieve full document class from a shortened one.
=head1 COLLECTION NAMING
By default, Mongoose composes the Mongo collection name from your package name by replacing double-colon C<::> with underscores C<_>, separating camel-case, such as C<aB> with C<a_b> and uppercase with lowercase letters.
This behaviour can be changed by choosing other named method or by setting
the collection naming routine with a C
=head1 REPOSITORY
Fork me on github: Lhttp://github.com/rodrigolive/mongoose
=head1 BUGS
This is a WIP. Please report bugs via Github Issue reporting Lhttps://github.com/rodrigolive/mongoose/issues. Test cases highly desired and appreciated.
=head1 TODO
-
Better error control
-
Allow query->fields to control which fields get expanded into the object.
-
Better documentation.
=head1 AUTHOR
Rodrigo de Oliveira (rodrigolive), C<[email protected]>
=head1 MAINTAINER
Diego Kuperman (diegok)
=head1 CONTRIBUTORS
Arthur Wolf
Solli Moreira Honorio (shonorio)
Michael Gentili (gentili)
Kang-min Liu (gugod)
Allan Whiteford (allanwhiteford)
Kartik Thakore (kthakore)
David Golden (dagolden)
Mohammad S Anwar (manwar)
=head1 LICENSE
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
=cut