Rendimiento del grupo MongoDB en node.js

Como prefacio, estoy usando Node.js con Mongo-db-native.

También estoy usando GridFS para almacenar imágenes y cada imagen tiene metadatos, uno de los cuales es una identificación de producto.

Quiero consultar todos los fs.files y devolver imágenes asociadas a un producto específico.

Así es como estoy haciendo esto actualmente:

this.collection.ensureIndex({
    product_id: 1,
}, function (err, edIndex) {
    self.collection.group(   ['group'] , {
        "product_id": ObjectID(product_id)
    } , {
        docs: []
    } , function (doc, prev) {
        prev.docs.push({
            width: doc.width,
            height: doc.height,
            _id: doc._id
        });
    } , true , function (err, results) { 
        if (err) {
            callback(err)
        } else {
            callback(null, results)
        } 
    });
});

Estoy encontrando que esto es extremadamente lento. ¿Alguien tiene alguna sugerencia como alternativa o cómo aumentar el rendimiento de esto?

¡Gracias!

preguntado el 22 de mayo de 12 a las 18:05

¿Estás seguro de que has publicado el código correcto? -

sureIndex() crea un índice, por lo que no es necesario llamarlo para cada consulta. -

1 Respuestas

Aquí hay una consulta simple en la sintaxis de shell de Mongo que encontrará todos los archivos GridFS con ProductId = 42 en sus metadatos.

db.fs.files.find({"metadata.ProductId": 42});

Los documentos devueltos contendrán un nombre de archivo que se puede usar con GridStore de mongo-native.

contestado el 22 de mayo de 12 a las 22:05

Bueno, están pasando un poco más, estoy construyendo una nueva matriz basada en los tamaños, pero supongo que podría hacerlo fuera de mongo, sin usar un agregado de grupo. - dzm

Map reduce, que se encuentra detrás del grupo de mongo-native, es excelente para algunos tipos de problemas. Lo encuentro excesivo para algo tan simple como agregar resultados a una nueva matriz. - Martin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.