DBIx::CouchLike - DBI based CouchDB like document database library
use DBIx::CouchLike; use DBI; $dbh = DBI->connect($dsn); $couch = DBIx::CouchLike->new({ dbh => $dbh, table => 'foo' }); $couch->create_table; # at first time only # CREATE $id = $couch->post({ name => 'animal', tags => ['dog', 'cat']}); # CREATE (with id) $couch->post( $id => { name => 'animal', tags => ['dog', 'cat']} ); # or $couch->post({ _id => $id, name => 'animal', tags => ['dog', 'cat']}); # RETRIEVE $obj = $couch->get($id); # UPDATE $couch->put( $id, $obj ); # or $couch->put( $obj ); # must be defined $obj->{_id} # DELETE $couch->delte($id); # RETRIEVE all @all = $couch->all(); @grep = $couch->all({ id_like => "foo%" }); @designs = $couch->all_designs(); # define VIEW $map_sub_str = <<'END_OF_CODE'; sub { my ($obj, $emit) = @_; for my $tag ( @{ $obj->{tags} } ) { $emit->( $tag => $obj->{name} ); } } END_OF_CODE $reduce_sub_str = <<'END_OF_CODE'; sub { my ($keys, $values) = @_; return scalar @$values; } END_OF_CODE $couch->post({ _id => "_design/find", views => { tags => { map => $map_sub_str, }, tags_count => { map => $map_sub_str, reduce => $reduce_sub_str, }, }, }); # get VIEW @result = $couch->view("find/tags"); # is_deeply \@result => [ { key => "dog", value => "animal" }, # { key => "cat", value => "animal" }, # ] @result = $couch->view("find/tags", { key => "cat" }); @result = $couch->view("find/tags", { include_docs => 1 }); @result = $couch->view("find/tags_count"); # is_deeply \@result => [ { key => "dog", value => 1, id => $id }, # { key => "cat", value => 1, id => $id }, # ] # get VIEW using iterator $itr = $couch->view("find/tags"); $result_1 = $itr->next; $result_2 = $itr->next; # post / put with specified views $couch->put_with_views("find")->($obj); $couch->post_with_views("foo", "bar")->($obj1, $obj2);
DBIx::CouchLike is DBI based CouchDB like document database library.
$itr = $couch->view( $view_name, \%options ); options: key => "foo", # key = "foo" key => ["foo", "bar"], # key = "foo" OR key = "bar" key => { "<" => "10" }, # key < 10 key_like => "foo%", # key LIKE "foo%" key_reverse => 1, # ORDER BY key DESC value_reverse => 1, # ORDER BY value DESC include_docs => 1, # return original document with key, value pair (map only)
FUJIWARA <fujiwara.shunichiro gmail.com>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install DBIx::CouchLike, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::CouchLike
CPAN shell
perl -MCPAN -e shell install DBIx::CouchLike
For more information on module installation, please visit the detailed CPAN module installation guide.