1Mango(3) User Contributed Perl Documentation Mango(3)
2
3
4
6 Mango - Pure-Perl non-blocking I/O MongoDB driver
7
9 use Mango;
10 use feature state;
11
12 # Declare a Mango helper
13 sub mango { state $m = Mango->new('mongodb://localhost:27017') }
14 # or in a Mojolicious::Lite app
15 helper mango => sub { state $m = Mango->new('mongodb://localhost:27017') };
16
17 # Insert document
18 my $oid = mango->db('test')->collection('foo')->insert({bar => 'baz'});
19
20 # Find document
21 my $doc = mango->db('test')->collection('foo')->find_one({bar => 'baz'});
22 say $doc->{bar};
23
24 # Update document
25 mango->db('test')->collection('foo')
26 ->update({bar => 'baz'}, {bar => 'yada'});
27
28 # Remove document
29 mango->db('test')->collection('foo')->remove({bar => 'yada'});
30
31 # Insert document with special BSON types
32 use Mango::BSON ':bson';
33 my $oid = mango->db('test')->collection('foo')
34 ->insert({data => bson_bin("\x00\x01"), now => bson_time});
35
36 # Non-blocking concurrent find
37 my $delay = Mojo::IOLoop->delay(sub {
38 my ($delay, @docs) = @_;
39 ...
40 });
41 for my $name (qw(sri marty)) {
42 my $end = $delay->begin(0);
43 mango->db('test')->collection('users')->find({name => $name})->all(sub {
44 my ($cursor, $err, $docs) = @_;
45 $end->(@$docs);
46 });
47 }
48 $delay->wait;
49
50 # Event loops such as AnyEvent are supported through EV
51 use EV;
52 use AnyEvent;
53 my $cv = AE::cv;
54 mango->db('test')->command(buildInfo => sub {
55 my ($db, $err, $doc) = @_;
56 $cv->send($doc->{version});
57 });
58 say $cv->recv;
59
61 Mango is a pure-Perl non-blocking I/O MongoDB driver, optimized for use
62 with the Mojolicious real-time web framework, and with multiple event
63 loop support. Since MongoDB is still changing rapidly, only the latest
64 stable version is supported.
65
66 For MongoDB 2.6 support, use Mango 1.16.
67
68 To learn more about MongoDB you should take a look at the official
69 documentation <http://docs.mongodb.org>, the documentation included in
70 this distribution is no replacement for it.
71
72 Look at Mango::Collection for CRUD operations.
73
74 Many arguments passed to methods as well as values of attributes get
75 serialized to BSON with Mango::BSON, which provides many helper
76 functions you can use to generate data types that are not available
77 natively in Perl. All connections will be reset automatically if a new
78 process has been forked, this allows multiple processes to share the
79 same Mango object safely.
80
81 For better scalability (epoll, kqueue) and to provide IPv6, SOCKS5 as
82 well as TLS support, the optional modules EV (4.0+), IO::Socket::IP
83 (0.20+), IO::Socket::Socks (0.64+) and IO::Socket::SSL (1.84+) will be
84 used automatically if they are installed. Individual features can also
85 be disabled with the "MOJO_NO_IPV6", "MOJO_NO_SOCKS" and "MOJO_NO_TLS"
86 environment variables.
87
89 Mango inherits all events from Mojo::EventEmitter and can emit the
90 following new ones.
91
92 connection
93 $mango->on(connection => sub {
94 my ($mango, $id) = @_;
95 ...
96 });
97
98 Emitted when a new connection has been established.
99
101 Mango implements the following attributes.
102
103 default_db
104 my $name = $mango->default_db;
105 $mango = $mango->default_db('test');
106
107 Default database, defaults to "admin".
108
109 hosts
110 my $hosts = $mango->hosts;
111 $mango = $mango->hosts([['localhost', 3000], ['localhost', 4000]]);
112
113 Servers to connect to, defaults to "localhost" and port 27017.
114
115 inactivity_timeout
116 my $timeout = $mango->inactivity_timeout;
117 $mango = $mango->inactivity_timeout(15);
118
119 Maximum amount of time in seconds a connection can be inactive before
120 getting closed, defaults to 0. Setting the value to 0 will allow
121 connections to be inactive indefinitely.
122
123 ioloop
124 my $loop = $mango->ioloop;
125 $mango = $mango->ioloop(Mojo::IOLoop->new);
126
127 Event loop object to use for blocking I/O operations, defaults to a
128 Mojo::IOLoop object.
129
130 j
131 my $j = $mango->j;
132 $mango = $mango->j(1);
133
134 Wait for all operations to have reached the journal, defaults to 0.
135
136 max_bson_size
137 my $max = $mango->max_bson_size;
138 $mango = $mango->max_bson_size(16777216);
139
140 Maximum size for BSON documents in bytes, defaults to 16777216 (16MB).
141
142 max_connections
143 my $max = $mango->max_connections;
144 $mango = $mango->max_connections(5);
145
146 Maximum number of connections to use for non-blocking operations,
147 defaults to 5.
148
149 max_write_batch_size
150 my $max = $mango->max_write_batch_size;
151 $mango = $mango->max_write_batch_size(1000);
152
153 Maximum number of write operations to batch together, defaults to 1000.
154
155 protocol
156 my $protocol = $mango->protocol;
157 $mango = $mango->protocol(Mango::Protocol->new);
158
159 Protocol handler, defaults to a Mango::Protocol object.
160
161 w
162 my $w = $mango->w;
163 $mango = $mango->w(2);
164
165 Wait for all operations to have reached at least this many servers, 1
166 indicates just primary, 2 indicates primary and at least one secondary,
167 defaults to 1.
168
169 wtimeout
170 my $timeout = $mango->wtimeout;
171 $mango = $mango->wtimeout(1);
172
173 Timeout for write propagation in milliseconds, defaults to 1000.
174
176 Mango inherits all methods from Mojo::Base and implements the following
177 new ones.
178
179 backlog
180 my $num = $mango->backlog;
181
182 Number of queued operations that have not yet been assigned to a
183 connection.
184
185 db
186 my $db = $mango->db;
187 my $db = $mango->db('test');
188
189 Build Mango::Database object for database, uses "default_db" if no name
190 is provided. Note that the reference "mango" in Mango::Database is
191 weakened, so the Mango object needs to be referenced elsewhere as well.
192
193 from_string
194 $mango
195 = $mango->from_string('mongodb://sri:s3cret@localhost:3000/test?w=2');
196
197 Parse configuration from connection string.
198
199 get_more
200 my $reply = $mango->get_more($namespace, $return, $cursor);
201
202 Perform low level "GET_MORE" operation. You can also append a callback
203 to perform operation non-blocking.
204
205 $mango->get_more(($namespace, $return, $cursor) => sub {
206 my ($mango, $err, $reply) = @_;
207 ...
208 });
209 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
210
211 kill_cursors
212 $mango->kill_cursors(@ids);
213
214 Perform low level "KILL_CURSORS" operation. You can also append a
215 callback to perform operation non-blocking.
216
217 $mango->kill_cursors(@ids => sub {
218 my ($mango, $err) = @_;
219 ...
220 });
221 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
222
223 new
224 my $mango = Mango->new;
225 my $mango = Mango->new('mongodb://sri:s3cret@localhost:3000/test?w=2');
226
227 # Using TLS encryption
228 my $mango = Mango->new('mongodb://127.0.0.1:27017', tls => 1,
229 tls_cert => '/path/to/certificate.pem');
230
231 Construct a new Mango object and parse connection string with
232 "from_string" if necessary.
233
234 Not that is is strongly recommended to build your Mango object inside a
235 helper function like shown in the synopsis. This is because the Mango's
236 object reference inside Mango::Database objects is weakened to avoid
237 memory leaks. This means your Mango instance is quickly going to get
238 undefined after you use the "db" method. So, use a helper to prevent
239 that.
240
241 If a username and password are provided, Mango will try to authenticate
242 using SCRAM-SHA1. Warning: this will require Authen::SCRAM which is not
243 installed by default.
244
245 Any extra arguments given after the connection string will be passed to
246 the "connect" method from Mojo::IOLoop::Client. To connect to a server
247 using TLS, use the options "tls" (boolean), "tls_cert" and optionally
248 "tls_ca".
249
250 query
251 my $reply
252 = $mango->query($namespace, $flags, $skip, $return, $query, $fields);
253
254 Perform low level "QUERY" operation. You can also append a callback to
255 perform operation non-blocking.
256
257 $mango->query(($namespace, $flags, $skip, $return, $query, $fields) => sub {
258 my ($mango, $err, $reply) = @_;
259 ...
260 });
261 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
262
264 You can set the "MANGO_DEBUG" environment variable to get some advanced
265 diagnostics information printed to "STDERR".
266
267 MANGO_DEBUG=1
268
270 Some of the work on this distribution has been sponsored by Drip Depot
271 <http://www.dripdepot.com>, thank you!
272
274 Sebastian Riedel, "sri@cpan.org".
275
276 Current maintainer: Olivier Duclos "odc@cpan.org".
277
279 In alphabetical order:
280
281 alexbyk
282
283 Andrey Khozov
284
285 Colin Cyr
286
288 Copyright (C) 2013-2014, Sebastian Riedel.
289
290 This program is free software, you can redistribute it and/or modify it
291 under the terms of the Artistic License version 2.0.
292
294 <https://github.com/oliwer/mango>, Mojolicious::Guides,
295 <http://mojolicio.us>.
296
297
298
299perl v5.38.0 2023-07-20 Mango(3)