web-dev-qa-db-ja.com

配列フィールドで一致するものを見つける

私の画像共有アプリケーションでは、アルバムを作成して画像を追加できます。画像がサイトから削除されると、画像への参照(名前、ID)を保存しているアルバムからも削除する必要があります。

私が助けを必要としているのは、削除されようとしている画像(参照)を保存しているアルバムを見つけることです。

以下のルートでは、これまでに試したものですが、クエリでエラーが発生します。 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');
            }
        });
    });
});
13
holyredbeard

db.collection.find( { field : { $in : array } } );は必要な構文ではありません。つまり、「このフィールドに、配列で提供するリスト値の1つが含まれているドキュメントを見つけてください」ということです。

配列に到達する の間に等式を使用したい。

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

これは、imageNameがtheImageであるドキュメントを見つけて、この画像をimageName配列に含むアルバム(または画像が複数のアルバムに含まれる場合はアルバム)を返すことを示しています。

35
Asya Kamsky