Tengo una colección en la que los documentos a veces contienen un campo de status ya veces no. Siempre hay un campo data . Estoy tratando de formar una consulta para obtener el valor más reciente para ambos, pero cuando uso el operador $last , obtengo los valores del documento más reciente y, a veces, el status es null . ¿Cómo puedo hacer que recupere el último valor de status definido, manteniendo el valor de data del último documento?
Agregación actual:
const project = await collection.aggregate([ { $match: { projectId: id } }, { $group: { _id: '$projectId', status: { $last: '$status' }, data: { $last: '$data' } } } ]).toArray();Puede usar $facet y realizar múltiples consultas en paralelo en el mismo conjunto de documentos.
db.collection.aggregate([ { $facet: { last_status: [ { "$match": { status: { $ne: null } } }, { "$sort": { _id: -1 } }, { "$limit": 1 } ], last_data: [ { "$match": { data: { $ne: null } } }, { "$sort": { _id: -1 } }, { "$limit": 1 } ] } }, { "$project": { other_fields: { $first: "$last_data" }, status: { $first: "$last_status.status" } } } ])