Rendimiento del grupo MongoDB en node.js
Frecuentes
Visto 306 veces
0
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!
1 Respuestas
1
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 node.js mongodb database or haz tu propia pregunta.
¿Estás seguro de que has publicado el código correcto? - Martin
sureIndex() crea un índice, por lo que no es necesario llamarlo para cada consulta. - Martin