[ { "_id": "59009087f8ed4e2ecc91fcbe", "password": "test", "email": "", "username": "root", "__v": 3, "stats": [ { "_id": "590090a0f8ed4e2ecc91fcbf", "time": 98, "scramble": "U2 FRU' RB' L' UL' B2 R2 BF' U2 R' B2 R2 D R2 U", "type": "three", "status": 0, "date": "2017-04-26T12:20:48.622Z" }, { "_id": "590090adf8ed4e2ecc91fcc0", "time": 120, "scramble": "R2 U2 D' U' BDBL' U2 R2 F2 L2 R' F2 U F2 L2 D L2", "type": "three", "status": 0, "date": "2017-04-26T12:21:01.318Z" }, { "_id": "590090da8f0e120320f36945", "time": 191, "scramble": "F2 B' LFRB' FB' D' F2 R2 BU' D' FUDB' F' D", "type": "four", "status": 0, "date": "2017-04-26T12:21:46.679Z" } ], "accountDate": "2017-04-26T12:20:23.085Z" } ]Tengo una colección de usuarios. Uno de los usuarios se muestra en el código anterior. Quiero seleccionar un usuario por su id. Luego, DESDE EL USUARIO SELECCIONADO, quiero objetos de la matriz de estadísticas que tengan el tipo: "tres". He buscado durante bastante tiempo y no he encontrado una solución. El método actual que estoy usando es este:
User.findOne({ _id: id }, function (err, user) { if(err){ console.log(err); } else { user.stats.forEach(function (time, i, array) { if(time.type != req.body.type){ array.splice(i, 1); } }); res.send(user.stats); } });El problema es que la matriz de estadísticas será demasiado grande y el proceso será muy lento.
Si no puede encontrar una manera de seleccionar de la matriz de estadísticas en la consulta, diría que al menos no use el splice para filtrar las estadísticas del tipo incorrecto. Intente usar el filtro o insertar estadísticas de tipo 'tres' en una nueva matriz para ver si mejora el rendimiento.