Database
db={users:[{userID:"User1",fullName:"xxxx",role:"bidder"},{userID:"User2",fullName:"xxxx",role:"bidder"},{userID:"User3",fullName:"xxxx",role:"bidder"}],auctions:[{auctionID:10001,startDate:ISODate("2023-09-20T12:37:00Z"),endDate:ISODate("2023-09-21T12:37:00Z"),startingPrice:100},{auctionID:10002,startDate:ISODate("2023-09-22T12:37:00Z"),endDate:ISODate("2023-09-22T12:37:00Z"),startingPrice:2000},{auctionID:10003,startDate:ISODate("2023-09-22T12:37:00Z"),endDate:ISODate("2023-09-25T12:37:00Z"),startingPrice:800},{auctionID:10004,startDate:ISODate("2023-09-22T12:37:00Z"),endDate:ISODate("2023-09-26T12:37:00Z"),startingPrice:3000}],bids:[{bidID:101,auctionID:10001,bidderID:"User1",bidAmount:120,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:102,auctionID:10001,bidderID:"User2",bidAmount:140,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:103,auctionID:10001,bidderID:"User1",bidAmount:160,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:104,auctionID:10001,bidderID:"User2",bidAmount:200,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:105,auctionID:10001,bidderID:"User1",bidAmount:240,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:106,auctionID:10002,bidderID:"User3",bidAmount:2200,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:107,auctionID:10002,bidderID:"User2",bidAmount:2400,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:108,auctionID:10002,bidderID:"User1",bidAmount:2800,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:109,auctionID:10002,bidderID:"User2",bidAmount:3200,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:110,auctionID:10002,bidderID:"User3",bidAmount:3400,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:111,auctionID:10003,bidderID:"User1",bidAmount:900,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:112,auctionID:10003,bidderID:"User2",bidAmount:1200,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:113,auctionID:10003,bidderID:"User3",bidAmount:1600,bidDate:ISODate("2023-09-20T13:33:44Z")},{bidID:114,auctionID:10003,bidderID:"User2",bidAmount:1800,bidDate:ISODate("2023-09-20T13:33:44Z")}]}
Query
db.bids.aggregate([{$group:{_id:{bidder:"$bidderID",auction:"$auctionID"},myHighestBid:{$max:"$bidAmount"}}},{$lookup:{from:"auctions",localField:"_id.auction",foreignField:"auctionID",as:"isEnded",pipeline:[{$project:{_id:0,isEnded:{$lt:["$endDate","$$NOW"]}}}]}},{$setWindowFields:{partitionBy:"$_id.auction",sortBy:{myHighestBid:-1},output:{maxBidAmount:{$max:"$myHighestBid",window:{documents:["unbounded","current"]}}}}},{$set:{isEnded:{$first:"$isEnded.isEnded"}}},{$project:{_id:0,userID:"$_id.bidder",auctionID:"$_id.auction",maxBidAmount:"$myHighestBid",status:{$switch:{branches:[{case:{$and:[{$eq:["$myHighestBid","$maxBidAmount"]},"$isEnded"]},then:"You won the auction"},{case:{$and:[{$eq:["$myHighestBid","$maxBidAmount"]},{$not:"$isEnded"}]},then:"You are the highest bidder"},{case:{$and:[{$lt:["$myHighestBid","$maxBidAmount"]},"$isEnded"]},then:"You lost the auction"}],default:"You have been outbid"}}}},{$sort:{userID:1,auctionID:1}}])