summaryrefslogtreecommitdiff
blob: 3e9c6c9c4d839b197eaddbe80c2f26b36954ad98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
diff --git a/lib/MongoDB/GridFS.pm b/lib/MongoDB/GridFS.pm
index f9a2421..8a9c4a7 100644
--- a/lib/MongoDB/GridFS.pm
+++ b/lib/MongoDB/GridFS.pm
@@ -119,13 +119,19 @@ sub BUILD {
     my ($self) = @_;
    
     # check for the required indexs in the system.indexes colleciton
-    my $count = $self->_database->get_collection('system.indexes')->count({filename => 1});
-    $count   += $self->_database->get_collection('system.indexes')->count({files_id => 1, n => 1});
-    
-    # if we dont have the required indexes, create them now.
-    if ($count < 2){
-       $self->_ensure_indexes();
+    my @files_idx = $self->files->get_indexes;
+    my @matches = grep { $_->{key}->{filename} } @files_idx;
+    if (scalar @matches == 0) {
+        $self->files->ensure_index(Tie::IxHash->new(filename => 1), {"safe" => 1});
+    }
+
+    my @chunks_idx = $self->chunks->get_indexes;
+    @matches = grep { (defined $_->{key}->{files_id} && defined $_->{key}->{i} && 
+        $_->{key}->{files_id} == 1 && $_->{key}->{i} == 1)} @chunks_idx;
+    if (scalar @matches == 0) {
+        $self->chunks->ensure_index(Tie::IxHash->new(files_id => 1, n => 1), {"safe" => 1});
     }
+
 }
 
 
@@ -134,7 +140,7 @@ sub _ensure_indexes {
 
     # ensure the necessary index is present (this may be first usage)
     $self->files->ensure_index(Tie::IxHash->new(filename => 1), {"safe" => 1});
-    $self->chunks->ensure_index(Tie::IxHash->new(files_id => 1, n => 1), {"safe" => 1, "unique" => 1});
+    $self->chunks->ensure_index(Tie::IxHash->new(files_id => 1, n => 1), {"safe" => 1});
 }
 
 =head1 METHODS