2012-06-04 127 views
13

在我的图像共享应用程序中,您可以创建相册并向其添加图像。当图像从网站中删除时,也应该从存储图像引用的专辑(名称,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'); 
      } 
     }); 
    }); 
}); 

回答

34

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

你想使用相等,而reaching into the array

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

这是说找我的文档,其中imageName是theImage所以这将返回相册(或相册如果图片可以在多个相册),其中包含在其imageName阵列这一形象。

+6

非常好的答案(+1)。这是另一个链接,我发现http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element – Tom

+0

谢谢汤姆___;) – coiso

+1

链接现已死亡。 – Neta