digamos que tenemos una matriz de ID de usuario:
"ids": [ "623d71c628820d09797be558", "62419d6477775214de099838", "62419d7877775214de099845", "62419d8877775214de09984c" ]
y queremos devolver los primeros 10 documentos de cada identificación ordenados por fecha. Sé que podemos hacer:
const docs = await Model.find({ id: { $in: ids } }) .sort("date") .limit(10);
que devuelve 10 documentos ordenados por fecha, pero no para cada usuario, ¿cómo podría devolver 10 para cada uno en la matriz?
** EDITAR **
Aquí hay un documento de ejemplo de la colección de balance
:
{ "_id": "624a19a0b1cf7d69a5193737", "user": { "name": "john", "id": "623d71c628820d09797be558" }, "description": "chips", "amount": 2, "type": "expense", "date": "2022-04-03T22:03:12.774Z", "__v": 0 }
y un documento de "usuario":
{ "_id": "623d71c628820d09797be558", "name": "john", "__v": 0 }
Esta es una forma de hacerlo mediante una canalización de agregación.
db.collection.aggregate([ { "$match": { "id": { "$in": [ "623d71c628820d09797be558", "62419d6477775214de099838", "62419d7877775214de099845", "62419d8877775214de09984c" ] } } }, { "$sort": { "date": 1 } }, { "$group": { "_id": "$id", "docs": { "$push": "$$CURRENT" } } }, { "$project": { "_id": 0, "id": "$_id", "docs": { "$slice": [ "$docs", 10 ] } } } ])
Pruébalo en mongoplayground.net .