Tengo esta estructura de documento:
{ ..., insertionDate: 'someDate', product: 'cool jacket', color: 'red', store: 'north store', }La cuestión es que esta colección almacena todos los cambios que ha tenido un producto. En este momento tengo el siguiente código para recuperar todos los productos de una tienda con un color de un conjunto previamente definido.
const colors = ['red', 'blue', 'orange']; collection.find({$and: [{store: store)}, {color: {$in: colors}}]});El problema es que obtengo todos los datos históricos, por ejemplo, puedo obtener 'chaqueta genial' en cada color 4 veces, porque aparece varias veces en la base de datos con diferente fecha de inserción.
¿Cómo obtengo la última fecha de inserción de cada producto?
Aquí hay un código probado:
await Collection.aggregate([ { $match: { color: { $in: colors } } }, { $sort: { insersionDate: -1 } }, { $group: { _id: '$product', doc: { $first: '$$ROOT' } } } ]);Puede lograr esto mediante una consulta agregada con tres canalizaciones.
$match para que coincida con la tienda y los colores deseados.
Utilice $sort para ordenar por orden de descripción de fecha de insertionDate .
$group para agrupar por nombre de producto o ID de producto. Mientras que agrupar el $first acumulador ayudará a obtener el producto insertado recientemente.
Puede usar collection.find({$and: [{store: store)}, {color: {$in: colors}}]}).sort(insertionDate: -1) los ordenará según la última fecha insertada.