sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo consultar solo documentos con la última marca de tiempo de un grupo?

Está mezclando algunos métodos aquí cuando puede hacer todo en la canalización de agregación. De lo contrario, solo es cuestión de dar los pasos en el orden correcto:

db.collection.aggregate([
    {$sort: { createdOn: -1 }},
    {$group: { _id: "$itemId", 
        createdOn: {$first: "$createdOn"},
        field1: {$first: "$field1" },
        field2: {$first: "$field2" }
    }},
    {$match: { field1: "foo" }}
])

Así que ordene primero los documentos más nuevos. Grupo en el itemId (el pedido se mantendrá para $first), y luego filtre con $match si es necesario. Pero sus documentos agrupados serán los más recientes.