Estoy tratando de encontrar muchos registros en la misma consulta, los registros son de este tipo
{ "key": 2, time: 3 }, { "key": 2, time: 5 }, { "key": 3, time: 4 } Me gustaría recuperar, por ejemplo, los registros con key inside [2,3] y con la cantidad de tiempo máxima relativa, por lo que en este caso graba con { "key": 2, time: 5 } y { "key": 3, time: 4 } debe devolverse.
Hasta ahora, solo obtuve cómo recuperar los registros con la key dentro de una matriz probada, pero no entiendo cómo obtener para cada clave en la matriz el registro con la última hora, me gustaría no usar el operador where .
Aquí hay un parque infantil con el escenario proporcionado https://mongoplayground.net/p/5sWnn8_HnqK
Puede usar la función agregada para encontrar el elemento máximo para cada clave. Ejemplo: https://mongoplayground.net/p/P9JSuvTHdZa
db.collection.aggregate([ { $match: { key: { $in: [ 2, 3 ] } } }, { $group: { _id: "$key", time: { $max: "$time" } } } ])Editado: como en el comentario sugerido
La forma más fácil de lograr esto es haciendo coincidir los documentos, ordenándolos de forma descendente y luego eligiendo el "primer" documento para cada clave, así:
db.collection.aggregate([ { $match: { key: { $in: [ 1, 2, 3 ] } } }, { $sort: { time: -1 } }, { $group: { _id: "$key", first: { $first: "$$ROOT" } } } ])