2012-06-05 3 views
0

Dans mon application de partage d'images, vous pouvez télécharger des images et créer des albums. Lorsque vous supprimez une image du site, elle doit également être supprimée dans les albums (ceux qui contiennent l'image). Ci-dessous est la route pour la suppression d'une image, et ce dont j'ai vraiment besoin d'aide est pourquoi le code pour supprimer les images (imageName et imageId) dans les albums ci-dessous ne fonctionne pas.La requête Mongodb ne fonctionne pas

Merci d'avance!

Les modèles:

var AlbumSchema = new Schema({ 
     title    : String, 
     imageName   : [String], 
     imageId   : [String] 
}); 

modelObject.AlbumSchema = AlbumSchema; 
modelObject.Album = mongoose.model('Album', AlbumSchema); 

-

var BlogPostSchema = new Schema({ 
    name : String, 
    size : Number, 
    type : String, 
    author : ObjectId, 
    title : String 
}); 

modelObject.Comment = mongoose.model('Comment', CommentSchema); 
modelObject.BlogPost = mongoose.model('BlogPost', BlogPostSchema); 

La partie qui ne fonctionne pas dans le code ci-dessous est le suivant:

albums[i].imageName.remove(j); 
albums[i].imageId.remove(j);        
albums[i].save(function (err){ 
    if (err) { 
     console.log(err); 
     // do something 
    } 
}); 

Fu Code ll:

app.get('/blog/delete/:id', function(req, res){ 

    model.BlogPost.findById(req.params.id, function (err, blog){ 

     var theImage = blog.name; 

     var query = albumModel.Album.find({ imageName:theImage }) 
     query.exec(function (err, albums) { 

      if (!albums) { 

       blog.remove(function(err) { 
        console.log(err); 
        // do something 
       }); 

       res.redirect('/blogs'); 

      } 

      else { 
       for (var i = 0; i < albums.length; i++) { 
        for (var j = 0; j< albums[i].imageName.length; j++){ 

         if (theImage == albums[i].imageName[j]){ 

          albums[i].imageName.remove(j); 
          albums[i].imageId.remove(j);        
          albums[i].save(function (err){ 
           if (err) { 
            console.log(err); 
            // do something 
           } 
          }); 
         } 
        } 
       } 
      } 

      blog.remove(function(err) { 
       console.log(err); 
       // do something 
      }); 

      res.redirect('/blogs'); 
     }); 
    }); 
}); 

Répondre

0

tableaux JavaScript ne dispose pas d'une méthode remove donc j'attendre votre code peut être s'écraser. Vous devriez utiliser du code comme albums[i].imageName.splice(j, 1); à la place.

Questions connexes