Tengo una aplicación vanilla js con express en el backend y mongoDB. Básicamente un constructor de restaurantes, cada cliente puede reservar una mesa con formulario. Las entradas son el nombre, el cuadro de selección con las tablas disponibles y el precio de oferta. La oferta significa que el cliente con la oferta más alta para la mesa ganará la mesa y los demás la perderán.
¿Cómo puedo obtener solo el cliente con la oferta más alta para la tabla x?
Por ejemplo, si tengo 3 clientes en el siguiente fragmento reservado para tableID "2", ¿cómo puedo obtener solo el que tiene la oferta más alta?
Imaginemos una carga útil como esta:
const bookings = [ { customerName: 'Joe', bidValue: 178, // for example in $ - dollars tableID: 2 }, { customerName: 'Frank', bidValue: 212, // for example in $ - dollars tableID: 2 }, { customerName: 'Martin', bidValue: 123, // for example in $ - dollars tableID: 2 }, { customerName: 'John', bidValue: 15, // for example in $ - dollars tableID: 1 }, { customerName: 'Gino', bidValue: 87, // for example in $ - dollars tableID: 1 }, { customerName: 'Patrick', bidValue: 23, // for example in $ - dollars tableID: 3 }, ];Debe utilizar la función de clasificación (1 ascendente -1 descendente).
db.bookings.find().sort( { "bidValue": 1 } )Para obtener solo el valor más alto, debe usar $sort y $limit de esta manera:
$match para obtener la mesa en la que puede obtener la oferta más alta.$sort descendente para obtener el valor más alto en la primera posición$limit para generar solo el primer valor (es decir, el más alto) db.collection.aggregate( {"$match": {"tableID": 2}}, {"$sort": {"bidValue": -1}}, {"$limit": 1})Ejemplo aquí
Y, para obtener el valor más alto para cada tabla, también necesita $group stage en la canalización de agregación.
En este caso, la consulta es un poco diferente.
$sort para obtener el valor más alto en la parte superior y luego$group por tableId .$first para obtener el valor máximo porque se ordenan, entonces, el primer elemento será el deseado. { "$sort": {"bidValue": -1} }, { "$group": { "_id": "$tableID", "customerName": {"$first": "$customerName"}, "bidValue": {"$first": "$bidValue"} } })Ejemplo aquí