AnyMongo
view release on metacpan or search on metacpan
lib/AnyMongo/Collection.pm view on Meta::CPAN
package AnyMongo::Collection;
BEGIN {
$AnyMongo::Collection::VERSION = '0.03';
}
# ABSTRACT: Asynchronous MongoDB::Collection
use strict;
use warnings;
use namespace::autoclean;
use Tie::IxHash;
use boolean;
use Any::Moose;
has _database => (
is => 'ro',
isa => 'AnyMongo::Database',
required => 1,
);
has name => (
is => 'ro',
isa => 'Str',
required => 1,
);
has full_name => (
is => 'ro',
isa => 'Str',
lazy => 1,
builder => '_build_full_name',
);
sub _build_full_name {
my ($self) = @_;
my $name = $self->name;
my $db_name = $self->_database->name;
return "${db_name}.${name}";
}
sub to_index_string {
my $keys = shift;
my @name;
if (ref $keys eq 'ARRAY' || ref $keys eq 'HASH' ) {
while ((my $idx, my $d) = each(%$keys)) {
push @name, $idx;
push @name, $d;
}
}
elsif (ref $keys eq 'Tie::IxHash') {
my @ks = $keys->Keys;
my @vs = $keys->Values;
@vs = $keys->Values;
for (my $i=0; $i<$keys->Length; $i++) {
push @name, $ks[$i];
push @name, $vs[$i];
}
}
else {
confess 'expected Tie::IxHash, hash, or array reference for keys';
}
return join("_", @name);
}
lib/AnyMongo/Collection.pm view on Meta::CPAN
$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
the same terms as the Perl 5 programming language system itself.
=cut
__END__
( run in 1.221 second using v1.01-cache-2.11-cpan-39bf76dae61 )