AnyMongo
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/AnyMongo/Collection.pm view on Meta::CPAN
$q = $query ? $query : {};
}
my $conn = $self->_database->_connection;
my $ns = $self->full_name;
my $cursor = AnyMongo::Cursor->new(
_connection => $conn,
_ns => $ns,
_query => $q,
_limit => $limit,
_skip => $skip
);
return $cursor;
}
sub query {
my ($self, $query, $attrs) = @_;
return $self->find($query, $attrs);
}
sub find_one {
my ($self, $query, $fields) = @_;
$query ||= {};
$fields ||= {};
return $self->find($query)->limit(-1)->fields($fields)->next;
}
sub insert {
my ($self, $object, $options) = @_;
my ($id) = $self->batch_insert([$object], $options);
return $id;
}
sub batch_insert {
my ($self, $object, $options) = @_;
confess 'not an array reference' unless ref $object eq 'ARRAY';
my $ns = $self->full_name;
my ($insert, $ids) = AnyMongo::MongoSupport::build_insert_message(
AnyMongo::MongoSupport::make_request_id(),
$ns, $object);
my $conn = $self->_database->_connection;
if (defined($options) && $options->{safe}) {
my $ok = $self->_make_safe($insert);
if (!$ok) {
return 0;
}
}
else {
$conn->send_message($insert);
}
return @$ids;
}
sub update {
my ($self, $query, $object, $opts) = @_;
# there used to be one option: upsert=0/1
# now there are two, there will probably be
# more in the future. So, to support old code,
# passing "1" will still be supported, but not
# documentd, so we can phase that out eventually.
#
# The preferred way of passing options will be a
# hash of {optname=>value, ...}
my $flags = 0;
if ($opts && ref $opts eq 'HASH') {
$flags |= $opts->{'upsert'} << 0
if exists $opts->{'upsert'};
$flags |= $opts->{'multiple'} << 1
if exists $opts->{'multiple'};
}
else {
$flags = !(!$opts);
}
my $conn = $self->_database->_connection;
my $ns = $self->full_name;
if ($opts->{safe}) {
return $self->_make_safe(AnyMongo::MongoSupport::build_update_message(
AnyMongo::MongoSupport::make_request_id(),
$ns, $query, $object, $flags));
}
$conn->send_message(AnyMongo::MongoSupport::build_update_message(
AnyMongo::MongoSupport::make_request_id(),
$ns, $query, $object, $flags));
return 1;
}
sub remove {
my ($self, $query, $options) = @_;
my $just_one;
my $conn = $self->_database->_connection;
my $ns = $self->full_name;
$query ||= {};
if (defined $options && ref $options eq 'HASH') {
$just_one = exists $options->{just_one} ? $options->{just_one} : 0;
if ($options->{safe}) {
my $ok = $self->_make_safe(AnyMongo::MongoSupport::build_remove_message(
AnyMongo::MongoSupport::make_request_id(),
$ns, $query, $just_one));
return $ok;
}
}
else {
$just_one = $options || 0;
}
$conn->send_message(AnyMongo::MongoSupport::build_remove_message(
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.139 second using v1.00-cache-2.02-grep-82fe00e-cpan-1310916c57ae )