简体   繁体   English

MongoDB查询不起作用

[英]Mongodb query doesn't work

In my image sharing application you can upload images and create albums. 在我的图像共享应用程序中,您可以上传图像并创建相册。 When you delete an image from the site it shall also be deleted in the albums (the ones that has got the image in it). 当您从网站删除图片时,该图片也应从相册中删除(其中包含图片)。

Below is the route for deleting an image, and what I really need help with is why the code for deleting the images (imageName and imageId) in the albums below doesn't work. 以下是删除图片的方法,而我真正需要帮助的是为什么下面的相册中的删除图片的代码(imageName和imageId)不起作用。

Thanks in advance! 提前致谢!

The models: 型号:

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

The part that doesn't work in the code below is the following: 以下代码中不起作用的部分如下:

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

Full code: 完整代码:

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

JavaScript arrays don't have a remove method so I would expect your code may be crashing. JavaScript数组没有remove方法,因此我希望您的代码可能崩溃。 You should be using code like albums[i].imageName.splice(j, 1); 您应该使用像albums[i].imageName.splice(j, 1);这样的代码albums[i].imageName.splice(j, 1); instead. 代替。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM