Mango
view release on metacpan or search on metacpan
lib/Mango.pm view on Meta::CPAN
# Update document
mango->db('test')->collection('foo')
->update({bar => 'baz'}, {bar => 'yada'});
# Remove document
mango->db('test')->collection('foo')->remove({bar => 'yada'});
# Insert document with special BSON types
use Mango::BSON ':bson';
my $oid = mango->db('test')->collection('foo')
->insert({data => bson_bin("\x00\x01"), now => bson_time});
# Non-blocking concurrent find
my $delay = Mojo::IOLoop->delay(sub {
my ($delay, @docs) = @_;
...
});
for my $name (qw(sri marty)) {
my $end = $delay->begin(0);
mango->db('test')->collection('users')->find({name => $name})->all(sub {
my ($cursor, $err, $docs) = @_;
$end->(@$docs);
});
}
$delay->wait;
# Event loops such as AnyEvent are supported through EV
use EV;
use AnyEvent;
my $cv = AE::cv;
mango->db('test')->command(buildInfo => sub {
my ($db, $err, $doc) = @_;
$cv->send($doc->{version});
});
say $cv->recv;
=head1 DESCRIPTION
L<Mango> is a pure-Perl non-blocking I/O MongoDB driver, optimized for use
with the L<Mojolicious> real-time web framework, and with multiple event loop
support. Since MongoDB is still changing rapidly, only the latest stable
version is supported.
For MongoDB 2.6 support, use L<Mango> 1.16.
To learn more about MongoDB you should take a look at the
L<official documentation|http://docs.mongodb.org>, the documentation included
in this distribution is no replacement for it.
Look at L<Mango::Collection> for CRUD operations.
Many arguments passed to methods as well as values of attributes get
serialized to BSON with L<Mango::BSON>, which provides many helper functions
you can use to generate data types that are not available natively in Perl.
All connections will be reset automatically if a new process has been forked,
this allows multiple processes to share the same L<Mango> object safely.
For better scalability (epoll, kqueue) and to provide IPv6, SOCKS5 as well as
TLS support, the optional modules L<EV> (4.0+), L<IO::Socket::IP> (0.20+),
L<IO::Socket::Socks> (0.64+) and L<IO::Socket::SSL> (1.84+) will be used
automatically if they are installed. Individual features can also be disabled
with the C<MOJO_NO_IPV6>, C<MOJO_NO_SOCKS> and C<MOJO_NO_TLS> environment
variables.
=head1 EVENTS
L<Mango> inherits all events from L<Mojo::EventEmitter> and can emit the
following new ones.
=head2 connection
$mango->on(connection => sub {
my ($mango, $id) = @_;
...
});
Emitted when a new connection has been established.
=head1 ATTRIBUTES
L<Mango> implements the following attributes.
=head2 default_db
my $name = $mango->default_db;
$mango = $mango->default_db('test');
Default database, defaults to C<admin>.
=head2 hosts
my $hosts = $mango->hosts;
$mango = $mango->hosts([['localhost', 3000], ['localhost', 4000]]);
Servers to connect to, defaults to C<localhost> and port C<27017>.
=head2 inactivity_timeout
my $timeout = $mango->inactivity_timeout;
$mango = $mango->inactivity_timeout(15);
Maximum amount of time in seconds a connection can be inactive before getting
closed, defaults to C<0>. Setting the value to C<0> will allow connections to
be inactive indefinitely.
=head2 ioloop
my $loop = $mango->ioloop;
$mango = $mango->ioloop(Mojo::IOLoop->new);
Event loop object to use for blocking I/O operations, defaults to a
L<Mojo::IOLoop> object.
=head2 j
my $j = $mango->j;
$mango = $mango->j(1);
Wait for all operations to have reached the journal, defaults to C<0>.
( run in 1.148 second using v1.01-cache-2.11-cpan-39bf76dae61 )