MongoDB
view release on metacpan or search on metacpan
lib/MongoDB/GridFSBucket.pm view on Meta::CPAN
#pod When true, files will not include the deprecated C<md5> field in the
#pod file document. Defaults to false.
#pod
#pod =cut
has disable_md5 => (
is => 'ro',
isa => Boolish,
);
# determines whether or not to attempt index creation
has _tried_indexing => (
is => 'rwp',
isa => Boolish,
);
has _files => (
is => 'lazy',
isa => InstanceOf ['MongoDB::Collection'],
init_arg => undef,
);
sub _build__files {
my $self = shift;
my $coll = $self->database->get_collection(
$self->bucket_name . '.files',
{
read_preference => $self->read_preference,
write_concern => $self->write_concern,
read_concern => $self->read_concern,
max_time_ms => $self->max_time_ms,
bson_codec => $self->bson_codec,
}
);
return $coll;
}
has _chunks => (
is => 'lazy',
isa => InstanceOf ['MongoDB::Collection'],
init_arg => undef,
);
sub _build__chunks {
my $self = shift;
my $coll = $self->database->get_collection(
$self->bucket_name . '.chunks',
{
read_preference => $self->read_preference,
write_concern => $self->write_concern,
read_concern => $self->read_concern,
max_time_ms => $self->max_time_ms,
# XXX: Generate a new bson codec here to
# prevent users from changing it?
bson_codec => $self->bson_codec,
}
);
return $coll;
}
# index operations need primary server, regardless of bucket read prefs
sub _create_indexes {
my ($self) = @_;
$self->_set__tried_indexing(1);
my $pf = $self->_files->clone( read_preference => 'primary' );
return if $pf->count_documents({}) > 0;
my $pfi = $pf->indexes;
my $pci = $self->_chunks->clone( read_preference => 'primary' )->indexes;
if ( !grep { $_->{name} eq 'filename_1_uploadDate_1' } $pfi->list->all ) {
$pfi->create_one( [ filename => 1, uploadDate => 1 ], { unique => 1 } );
}
if ( !grep { $_->{name} eq 'files_id_1_n_1' } $pci->list->all ) {
$pci->create_one( [ files_id => 1, n => 1 ], { unique => 1 } );
}
return;
}
#pod =method find
#pod
#pod $result = $bucket->find($filter);
#pod $result = $bucket->find($filter, $options);
#pod
#pod $file_doc = $result->next;
#pod
#pod Executes a query on the file documents collection with a
#pod L<filter expression|MongoDB::Collection/Filter expression> and
#pod returns a L<MongoDB::QueryResult> object. It takes an optional hashref
#pod of options identical to L<MongoDB::Collection/find>.
#pod
#pod =cut
sub find {
my ( $self, $filter, $options ) = @_;
return $self->_files->find( $filter, $options )->result;
}
#pod =method find_one
#pod
#pod $file_doc = $bucket->find_one($filter, $projection);
#pod $file_doc = $bucket->find_one($filter, $projection, $options);
#pod
#pod Executes a query on the file documents collection with a
#pod L<filter expression|MongoDB::Collection/Filter expression> and
#pod returns the first document found, or C<undef> if no document is found.
#pod
#pod See L<MongoDB::Collection/find_one> for details about the
#pod C<$projection> and optional C<$options> fields.
#pod
#pod =cut
sub find_one {
my ( $self, $filter, $projection, $options ) = @_;
return $self->_files->find_one( $filter, $projection, $options );
}
( run in 2.663 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )