Code Monkey home page Code Monkey logo

mongoose's Introduction

NAME

Mongoose - MongoDB document to Moose object mapper

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;

DESCRIPTION

This is a MongoDB to 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 Mongoose::Intro.

Or proceed directly to the Mongoose::Cookbook for many day-to-day recipes.

WARNING

Since version 1.00 Mongoose only support the new MongoDB driver v1.x.x which it's now required.

Please let me know if you find anything strange using this new driver.

METHODS

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, db takes the same parameters as MongoDB::MongoClient.

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 MongoDB::MongoClient and return a MongoDB::Database object for mydb.

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 wating 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 /]
);

connect

Connects to Mongo using the connection arguments passed to the db method.

load_schema

Uses Module::Pluggable to require all modules under a given search path or search dir.

All arguments will be sent to Module::Pluggable's import, except for Mongoose specific ones.

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( ... );

connection

Sets/returns the current connection object, of class MongoDB::MongoClient.

Defaults to whatever MongoDB defaults.

disconnect

Unsets the Mongoose connection handler.

class_config

Keep track of document classes config solving aliasing indirection.

aliased

Keep track of aliasing classes. Useful to retrieve full document class from a shortened one.

COLLECTION NAMING

By default, Mongoose composes the Mongo collection name from your package name by replacing double-colon :: with underscores _, separating camel-case, such as aB with 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 closure as exlained in Mongoose::Role::Naming.

REPOSITORY

Fork me on github: http://github.com/rodrigolive/mongoose

BUGS

This is a WIP, now *beta* quality software.

Report bugs via Github Issue reporting https://github.com/rodrigolive/mongoose/issues. Test cases highly desired and appreciated.

TODO

* Better error control

* Finish-up multiple database support

* Allow query->fields to control which fields get expanded into the object.

* Cleanup internals.

* More tests and use cases.

* Better documentation.

SEE ALSO

KiokuDB

AUTHOR

Rodrigo de Oliveira (rodrigolive), C<[email protected]>

MAINTAINER

Diego Kuperman (diegok)

CONTRIBUTORS

Arthur Wolf
Solli Moreira Honorio (shonorio)
Michael Gentili (gentili)
Kang-min Liu (gugod)
Allan Whiteford (allanwhiteford)
Kartik Thakore (kthakore)
David Golden (dagolden)

LICENSE

This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.