Quiero mapear a través de una matriz de objetos que se guardaron en la base de MongoDB Database y devolver todos los índices que coincidan con mi condición...
por ejemplo, aquí está la matriz ...
orders: [ { foodId: { type: mongoose.Types.ObjectId, ref: "Foods", }, placeId: { type: mongoose.Types.ObjectId, required: true, ref: "Places", }, qty: { type: Number, required: true, default: 1, }, price: { type: Number, required: true, }, }, ],Quiero obtener todos los alimentos que se piden en un lugar, probé esta consulta pero no funcionó y solo devuelve la primera coincidencia e ignoro el resto.
// HERE IS ORDERS COLLECTION, NOT ORDERS ARRAY THAT CONTAINS OBJECTS const order = await Orders.find({ // HERE IS ORDERS ARRAY THAT CONTAINS THE OBJECTS orders: { $elemMatch: { placeId: mongoose.Types.ObjectId("610ae7be5867510cb43f0537"), }, }, })esta consulta solo devuelve la primera coincidencia e ignora todo después de eso
Puede hacerlo en el servidor usando $filter La consulta a continuación ajusta la matriz de pedidos y conserva solo los pedidos que tienen placeId=2
Datos en
{ "_id": 1, "orders": [ { "foodId": 1, "placeId": 2, "qty": 3, "price": 4 }, { "foodId": 5, "placeId": 6, "qty": 7, "price": 8 } ] }Consulta
aggregate( [ { "$addFields": { "orders": { "$filter": { "input": "$orders", "as": "order", "cond": { "$eq": [ "$$order.placeId", 2 ] } } } } } ])Resultados
{ "_id": 1, "orders": [ { "foodId": 1, "placeId": 2, "qty": 3, "price": 4 } ] }Tu podrías intentar
order = await Orders.find(...).toArray();y luego procese el resultado como cualquier matriz. ¿O es la matriz resultante de longitud uno?