2012-06-04 14 views
13

W aplikacji do udostępniania zdjęć możesz tworzyć albumy i dodawać do nich zdjęcia. Gdy obraz zostanie usunięty z witryny, powinien również zostać usunięty z albumu (ów), który przechowuje odniesienia do obrazu (imię i nazwisko, identyfikator).Wyszukiwanie dopasowania w polu tablicy

Potrzebuję pomocy, aby znaleźć albumy, które przechowują obraz (odnośnik), który ma zostać usunięty.

W poniższej trasie jest to, co próbowałem do tej pory, ale pojawia się błąd w zapytaniu. I zostały sprawdzone docs MongoDB i składnia wygląda następująco:

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

W mojej trasie dziedzinie i tablica zamienił się miejscami, które nie wydają się działać.

Byłbym wdzięczny za pomoc. Z góry dziękuję!

Moje modele wygląda następująco:

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); 

trasie do kasowania zdjęcia:

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'); 
      } 
     }); 
    }); 
}); 

Odpowiedz

34

db.collection.find({ field : { $in : array } }); nie jest składnia, że ​​chcesz. To mówi: "Znajdź mi dokument, w którym to pole ma jedną z wartości list, które zamierzam ci dać w tablicy".

Chcesz używać równości podczas reaching into the array.

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

Ten mówi mi odnaleźć dokument gdzie imageName jest theimage więc będzie to powrót do albumu (lub albumy, czy obraz może mieć więcej niż jeden album), która zawiera to zdjęcie na swojej tablicy imageName.

+6

Bardzo dobra odpowiedź (+1). To jest kolejny link, który znalazłem http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element – Tom

+0

dzięki Tom ___;) – coiso

+1

Link jest już martwy. – Neta

Powiązane problemy