在数组字段中查找匹配项

hol*_*ard 13 arrays mongoose mongodb node.js

在我的图像共享应用程序中,您可以创建相册并向其添加图像.从网站删除图像时,也应从存储图像引用的相册(名称,ID)中删除图像.

我需要帮助的是找到哪些相册存储了即将被删除的图像(参考).

在下面的路线是我到目前为止尝试过,但我得到一个错误的查询.我检查过Mongodb文档,语法如下:

db.collection.find( { field : { $in : array } } );
Run Code Online (Sandbox Code Playgroud)

在我的路线中,字段和数组已切换位置,这似乎不起作用.

我真的很感激一些帮助.提前致谢!

我的模型如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

删除图片的路线:

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');
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

Asy*_*sky 35

db.collection.find( { field : { $in : array } } );不是您想要的语法.那就是"找到我的文档,这个字段有一个列表值,我将在一个数组中给你."

您希望在到达数组时使用相等性.

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

这就是找到imageName为image的文档,这样就会返回Album(或者如果图片可以在多个相册中的专辑),其imageName数组中包含该图像.

  • 非常好的答案(+1).这是我找到的另一个链接http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element (6认同)