2012-06-04 7 views
13

En mi aplicación para compartir imágenes puede crear álbumes y agregarles imágenes. Cuando se elimina una imagen del sitio, también debería eliminarse de los álbumes que almacenan referencias a la imagen (nombre, id).Encontrar una coincidencia en un campo de matriz

Lo que necesito ayuda es encontrar los álbumes que han almacenado la imagen (referencia) que está a punto de eliminarse.

En la ruta siguiente, lo he intentado hasta ahora, pero aparece un error en la consulta. He comprobado los documentos MongoDB y la sintaxis es la siguiente:

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

En mi ruta del campo y la matriz tiene cambiado de lugar, que no parecen funcionar.

Realmente agradecería algo de ayuda. ¡Gracias por adelantado!

Mis modelos tiene el siguiente aspecto:

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

La ruta para borrar una imagen:

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

Respuesta

34

db.collection.find({ field : { $in : array } }); no es la sintaxis que desea. Eso dice "Encuéntrame el documento donde este campo tiene uno de los valores de lista que voy a darte en una matriz".

Desea utilizar la igualdad mientras reaching into the array.

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

Este dice que me encuentre el documento donde imageName es theImage por lo que este le devolverá el álbum (o los álbumes si una imagen puede estar en más de un álbum) que contiene esta imagen en su conjunto imageName.

+6

Muy buena respuesta (+1). Este es otro enlace que encontré http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element – Tom

+0

gracias Tom ___;) – coiso

+1

El enlace está ahora muerto. – Neta

Cuestiones relacionadas