- foreach my $entity ( keys %{ $data->{ $database }} ) {
-warn "# entry $entity ", dump( $data->{$database}->{$entity} );
- my $count = $#{ $data->{$database}->{$entity} } + 1;
- $list_databases->{entities}->{$entity} = $count;
- $list_databases->{document_count} += $count;
+
+ my $counts = _couchdb_get("/$database/_design/entity/_view/counts?group=true");
+ if ( exists $counts->{error} ) {
+ warn "creating CouchDB view because of ", dump($counts);
+ _couchdb_put "/$database/_design/entity", {
+ _id => '_design/entity',
+ language => 'javascript',
+ views => {
+ counts => {
+ map => q| function(doc) { emit(doc._id.split('.')[0],1); } |,
+ reduce => q| function(keys,values,rereduce) { return sum(values); } |,
+ }
+ }
+ };
+ $counts = _couchdb_get("/$database/_design/entity/_view/counts?group=true")
+ || die "give up!";
+ }
+
+ warn "# counts ",dump($counts);
+
+ foreach my $row ( @{ $counts->{rows} } ) {
+ my $n = $row->{value};
+ $list_databases->{entities}->{ $row->{key} } = $n;
+ $list_databases->{document_counts} += $n;