déjame ilustrar con un ejemplo, supongamos que mi colección es así,
products = [ { id: 1, name: "a", offer: true, expiryDate: "23-03-2022" }, { id: 2, name: "b", offer: false,//no offer }, { id: 3, name: "c", offer: true, expiryDate: "01-01-2021"//already expired }, { id: 4, name: "d", offer: true, expiryDate: "01-06-2022" }, ]Quiero aquí, los artículos ofrecidos vienen primero en orden descendente, no deben caducar y luego el artículo restante debe venir en orden descendente, por lo que el resultado sería así
[ { id: 4, name: "d", offer: true, expiryDate: "01-06-2022" }, { id: 1, name: "a", offer: true, expiryDate: "23-03-2022" }, { id: 3, name: "c", offer: true, expiryDate: "01-01-2021" }, { id: 2, name: "b", offer: false, }, ]db.collection.aggregate([ { "$match": {} }, { "$set": { "offer": { "$cond": { "if": { "$lt": [ { "$toDate": "$expiryDate" }, "$$NOW" ] }, "then": false, "else": true } }, "expiryDate": { "$toDate": "$expiryDate" } } }, { "$sort": { "expiryDate": -1, "offer": -1 } } ])