MongoDBx::Tiny::Document - document class
package My::Data::Foo; use strict; use MongoDBx::Tiny::Document; COLLECTION_NAME 'foo'; # FIELD NAME, sub{}, sub{}.. ESSENTIAL q/code/; # like CDBI's Essential. FIELD 'code', INT, LENGTH(10), DEFAULT('0'), REQUIRED; FIELD 'name', STR, LENGTH(30), DEFAULT('noname'); # RELATION ACCESSOR, sub{} RELATION 'bar', RELATION_DEFAULT('single','foo_id','id'); INDEX 'code',{ unique => 1 }; INDEX 'name'; INDEX [code => 1, name => -1]; sub process_some { my ($class,$tiny,$validator) = @_; $tiny->insert($class->collection_name,$validator->document); } package My::Data::Bar; use strict; use MongoDBx::Tiny::Document; COLLECTION_NAME 'bar'; ESSENTIAL qw/foo_id code/; FIELD 'foo_id', OID, DEFAULT(''), REQUIRED; FIELD 'code', INT(10), DEFAULT('0'),REQUIRED; FIELD 'name', VARCHAR(30), DEFAULT('noname'),&MY_ATTRIBUTE; RELATION 'foo', RELATION_DEFAULT('single','id','foo_id'); TRIGGER 'before_insert', sub { my ($document_class,$tiny,$document,$opt) = @_; }; # before_update,after_update,before_remove,after_remove TRIGGER 'after_insert', sub { my ($document_class,$object,$opt) = @_; }; QUERY_ATTRIBUTES { # no support in update and delete single => { del_flag => "off" }, search => { del_flag => "off" } }; sub MY_ATTRIBUTE { return { name => 'MY_ATTRIBUTE', callback => sub { return 1; } }; }
A list of functions that can be exported.
# define collection name. COLLECTION_NAME 'collection_name';
# define essential field always fetched. ESSENTIAL qw/field1 field2 field3/;
# define field name and validation. FIELD 'field_name', CODE, CODE;
RELATION 'relation_name', RELATION_NAME; sub RELATION_NAME { my $self = shift; my $c_name = shift; # relation my $tiny = $self->tiny; # xxx }
[EXPERIMENTAL] TRIGGER 'phase', CODE;
[EXPERIMENTAL] QUERY_ATTRIBUTES { # no support in update and delete single => { del_flag => "off" }, search => { del_flag => "off" } }; TODO: no_query option for condition
[EXPERIMENTAL] INDEX 'field_1'; INDEX 'field_2',{ unique => 1,drop_dups => 1, safe => 1, background => 1, name => 'foo' }; INDEX [field_2 => 1, field_3 => -1]; # for manage index $tiny->set_indexes('collection_name');
perldoc MongoDBx::Tiny::Attributes
perldoc MongoDBx::Tiny::Relation
$document_object = $document_class->new($document,$tiny);
alias to installed value $collection_name = $document_object->collection_name; $essential = $document_object->essential;# {_id => 1, field1 => 1, field2 => 1} # MongoDBx::Tiny::Document::Field $field = $document_object->field; # MongoDBx::Tiny::Document::Relation $relation = $document_object->relation; $qa = $document_object->query_attributes; $attr = $qa->{$condition}; # condition: single,search $indexes = $document_object->indexes; # arrayref
returns document value "_id"
returns MongoDBx::Tiny object
alias to object_to_document
$document = $document_object->object_to_document;
returns MongoDB::Collection $collection = $document_object->collection('collection_name');
$document_object->field_name('val'); $document_object->update; # $document_object->update($document); # only field_name will be changed $document_object->update({ field_name => 'val'});
$document_object->remove;
my $field = $document_object->field; my $attr = $document_object->get('field_name'); $attr->{name}; $attr->{callback}; my @field_names = $field->list; my @default_fields = $field->list('DEFAULT'); my @required_fields = $field->list('REQUIRED') my @oid_fields = $field->list('OID');
my $relation = $document_object->relation; my @relations = $relation->list;
Naoto ISHIKAWA, <toona at seesaa.co.jp>
<toona at seesaa.co.jp>
Copyright 2013 Naoto ISHIKAWA.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
To install MongoDBx::Tiny, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MongoDBx::Tiny
CPAN shell
perl -MCPAN -e shell install MongoDBx::Tiny
For more information on module installation, please visit the detailed CPAN module installation guide.