2012-06-05 2 views
0

В моем приложении для совместного использования изображений вы можете загружать изображения и создавать альбомы. Когда вы удаляете изображение с сайта, оно также должно быть удалено в альбомах (те, у которых в нем есть изображение).Mongodb query не работает

Ниже приведен маршрут удаления изображения, и мне действительно нужна помощь, поэтому код для удаления изображений (imageName и imageId) в приведенных ниже альбомах не работает.

Заранее благодарен!

Модели:

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); 

Та часть, которая не работает в коде ниже заключается в следующем:

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

Fu 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'); 
     }); 
    }); 
}); 

ответ

0

JavaScript массивы не имеют метод remove, так что я бы ожидать, что ваш код может быть сбой. Вместо этого вы должны использовать код, например albums[i].imageName.splice(j, 1);.