Подтвердить что ты не робот

Поиск соответствия в поле массива

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

Мне нужна помощь в том, чтобы найти альбомы, которые сохранили изображение (ссылку), которое должно быть удалено.

В приведенном ниже маршруте я попытался до сих пор, но я получаю сообщение об ошибке. Я проверил документы Mongodb, и синтаксис выглядит следующим образом:

db.collection.find( { field : { $in : array } } );

В моем маршруте поле и массив имеют переключаемые места, которые, похоже, не работают.

Я бы очень признателен за помощь. Спасибо заранее!

Мои модели выглядят следующим образом:

var AlbumSchema = new Schema({
      title             : String,
      imageName         : [String], <-- array the contains of images names
      imageId           : [String] <-- array the contains of images id's
});

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

var ImageSchema = new Schema({
    name : String,
    size : Number,
    type : String
});

modelObject.ImgSchema = ImgSchema;
modelObject.Image = mongoose.model('Image', ImgSchema);

Маршрут для удаления изображения:

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

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

        var theImage = blog.name;

        if (err) {
            console.log(err);
            // do something
        }

        var query = albumModel.Album.find( { imageName: { $in : theImage } } );

        query.exec(function (err, albums) {

            if (!albums) {
                console.log(err);
                // do something

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

                res.redirect('/blogs');
            }

            else {
                // code for removing the image(s) in the albums

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

Ответ 1

db.collection.find( { field : { $in : array } } ); - не тот синтаксис, который вы хотите. Это говорит: "Найдите мне документ, в котором это поле имеет одно из значений списка, которое я собираюсь дать вам в массиве".

Вы хотите использовать равенство, пока попадает в массив.

db.collection.find( { imageName:theImage } )

Это говорит, что найти документ, где imageName - это объект, поэтому он вернет альбом (или альбомы, если изображение может быть в нескольких альбомах), которое содержит это изображение в его массиве imageName.