2012-06-04 203 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