Mongoose::Join - simple class relationship resolver
package Author; use Moose; with 'Mongoose::Document'; has 'articles' => ( is => 'rw', isa => 'Mongoose::Join[Article]', default => sub { Mongoose::Join->new( with_class => 'Article' ) } );
This module can be used to establish relationships between two Mongoose::Document classes. It should not be used with Mongoose::EmbeddedDocument classes.
Mongoose::Document
Mongoose::EmbeddedDocument
All object relationships are stored as reference $id arrays into the parent object. This translates into a slight performance hit when loading the parent class, but not as much as loading all objects at one as when using an ArrayRef.
$id
ArrayRef
Attention: the relationship attribute needs to be initialized to an instance of Mongoose::Join before it can be used.
Mongoose::Join
Take a look at Mongoose::Class, it has nice syntatic sugar that does most of the initialization behind the scenes for you.
Add (join) a Mongoose::Document object for later saving.
Saving the parent Mongoose::Document will save both.
my $author = Author->new; $author->articles->add( Article->new ); $author->save; # saves all objects
Delete from the relationship list.
my $author = Author->find_one; my $first_article = $author->articles->find_one; $author->articles->remove( $first_article );
Run a MongoDB find on the joint collection.
find
# searches for articles belonging to this collection my $cursor = $author->articles->find({ title=>'foo article' }); while( my $article = $cursor->next ) { ... }
Returns a Mongoose::Cursor.
Just like find, but returns the first row found.
Alias to find_one
find_one
$first_cd = $artist->cds->first;
Same as find, but returns an ARRAY with all the results, instead of a cursor.
my @cds = $artist->cds->all;
Same as all, but returns a HASH instead of an ARRAY. The hash will be indexed by the key name sent as the first parameter. The hash value contains exactly one object. In case duplicate rows with the same key value are found, the resulting hash will contain the first one found.
all
# ie. returns $cds{'111888888292adf0000003'} = <CD Object>; my %cds = $artist->cds->hash_on( '_id' => { artist=>'Joe' }); # ie. returns $joe_cds{'Title1'} = <CD Object>; my %joe_cds = $artist->cds->hash_on( 'title' => { artist=>qr/Joe/ });
Similar to hash_on, but returns a hash with ALL rows found, grouped by the key.
hash_on
# ie. returns $cds{'Title1'} = [ <CD1 Object>, <CD2 Object>, ... ]; my %cds = $artist->cds->hash_array( 'title' => { artist=>'Joe' });
Hash values are ARRAYREFs with 1 or more rows.
Run a MongoDB query on the joint collection.
query
Returns the MongoDB::Collection for the joint collection.
Return the collection name for the joint Mongoose::Document.
To install Mongoose, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mongoose
CPAN shell
perl -MCPAN -e shell install Mongoose
For more information on module installation, please visit the detailed CPAN module installation guide.