AnyMongo
view release on metacpan or search on metacpan
lib/AnyMongo/Collection.pm view on Meta::CPAN
# warn "_make_safe getlasterror number_received:$number_received cursor_id:$cursor_id result=> ".Dumper($result);
if ( $number_received == 1 ) {
my $ok = $result->[0];
# $result->{ok} is 1 if err is set
Carp::croak $ok->{err} if $ok->{err};
# $result->{ok} == 0 is still an error
if (!$ok->{ok}) {
Carp::croak $ok->{errmsg};
}
}
return 1;
}
sub save {
my ($self, $doc, $options) = @_;
if (exists $doc->{"_id"}) {
if (!$options || !ref $options eq 'HASH') {
$options = {"upsert" => boolean::true};
}
else {
$options->{'upsert'} = boolean::true;
}
return $self->update({"_id" => $doc->{"_id"}}, $doc, $options);
}
else {
return $self->insert($doc, $options);
}
}
sub count {
my ($self, $query) = @_;
$query ||= {};
my $obj;
eval {
$obj = $self->_database->run_command({
count => $self->name,
query => $query,
});
};
# if there was an error, check if it was the "ns missing" one that means the
# collection hasn't been created or a real error.
if ($@) {
# if the request timed out, $obj might not be initialized
if ($obj && $obj =~ m/^ns missing/) {
return 0;
}
else {
die $@;
}
}
return $obj->{n};
}
sub validate {
my ($self, $scan_data) = @_;
$scan_data = 0 unless defined $scan_data;
my $obj = $self->_database->run_command({ validate => $self->name });
}
sub drop_indexes {
my ($self) = @_;
return $self->drop_index('*');
}
sub drop_index {
my ($self, $index_name) = @_;
my $t = tie(my %myhash, 'Tie::IxHash');
%myhash = ("deleteIndexes" => $self->name, "index" => $index_name);
return $self->_database->run_command($t);
}
sub get_indexes {
my ($self) = @_;
return $self->_database->get_collection('system.indexes')->query({
ns => $self->full_name,
})->all;
}
sub drop {
my ($self) = @_;
$self->_database->run_command({ drop => $self->name });
return;
}
__PACKAGE__->meta->make_immutable;
1;
=pod
=head1 NAME
AnyMongo::Collection - Asynchronous MongoDB::Collection
=head1 VERSION
version 0.03
=head1 AUTHORS
=over 4
=item *
Pan Fan(nightsailer) <nightsailer at gmail.com>
=item *
Kristina Chodorow <kristina at 10gen.com>
=back
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Pan Fan(nightsailer).
This is free software; you can redistribute it and/or modify it under
( run in 1.512 second using v1.01-cache-2.11-cpan-140bd7fdf52 )