ArangoDB
view release on metacpan or search on metacpan
lib/ArangoDB/Collection.pm view on Meta::CPAN
Query option(HASH reference).The attributes of $options are:
=over 4
=item limit
The maximal amount of documents to return. (optional)
=item skip
The documents to skip in the query. (optional)
=back
=back
=cut
sub by_example {
my ( $self, $example, $options ) = @_;
$options ||= {};
my $data = { collection => $self->{id}, example => $example };
map { $data->{$_} = $options->{$_} } grep { exists $options->{$_} } qw(limit skip);
my $res = eval { $self->{connection}->http_put( API_SIMPLE_EXAMPLE, $data ) };
if ($@) {
$self->_server_error_handler( $@, 'Failed to call Simple API(by_example) for the collection(%s)' );
}
return ArangoDB::Cursor->new( $self->{connection}, $res );
}
=pod
=head2 first_example($example)
Send 'first_example' simple query. Returns instance of L<ArangoDB::Document>.
This will return the first document matching a given example.
$example is the exmaple.
my $document = $collection->by_example({ age => 20 });
=cut
sub first_example {
my ( $self, $example ) = @_;
my $data = { collection => $self->{id}, example => $example };
my $res = eval { $self->{connection}->http_put( API_SIMPLE_FIRST, $data ) };
if ($@) {
$self->_server_error_handler( $@, 'Failed to call Simple API(first_example) for the collection(%s)' );
}
return ArangoDB::Document->new( $self->{connection}, $res->{document} );
}
=pod
=head2 range($attr,$lower,$upper[,$options])
Send 'range' simple query. Returns instance of L<ArangoDB::Cursor>.
It looks for documents in the collection with attribute between two values.
Note: You must declare a skip-list index on the attribute in order to be able to use a range query.
my $cursor = $collection->range('age', 20, 29, { closed => 1 } );
=over 4
=item $attr
The attribute path to check.
=item $lower
The lower bound.
=item $upper
The upper bound.
=item $options
Query option(HASH reference).The attributes of $options are:
=over 4
=item closed
If true, use intervall including $lower and $upper, otherwise exclude $upper, but include $lower
=item limit
The maximal amount of documents to return. (optional)
=item skip
The documents to skip in the query. (optional)
=back
=back
=cut
sub range {
my ( $self, $attr, $lower, $upper, $options ) = @_;
$options ||= {};
my $data = { collection => $self->{id}, attribute => $attr, left => $lower, right => $upper, };
map { $data->{$_} = $options->{$_} } grep { exists $options->{$_} } qw(closed limit skip);
$data->{closed} = $data->{closed} ? JSON::true : JSON::false;
my $res = eval { $self->{connection}->http_put( API_SIMPLE_RANGE, $data ) };
if ($@) {
$self->_server_error_handler( $@, 'Failed to call Simple API(range) for the collection(%s)' );
}
return ArangoDB::Cursor->new( $self->{connection}, $res );
}
=pod
=head2 near($latitude,$longitude[,$options])
( run in 1.473 second using v1.01-cache-2.11-cpan-39bf76dae61 )