Database
db={products:[{"_id":ObjectId("63515ad7d5f84ecbaac38f1e"),"code":"1","name":"Coca-Cola","pricePerItem":NumberInt(2),"stocks":[ObjectId("63515ad7d5f84ecbaac38f20"),ObjectId("63515b04d5f84ecbaac38f2e")]},{"_id":ObjectId("63515aeed5f84ecbaac38f24"),"code":"2","name":"Fanta","pricePerItem":NumberInt(4),"stocks":[ObjectId("63515aeed5f84ecbaac38f26")]}],stocks:[{"_id":ObjectId("63515ad7d5f84ecbaac38f20"),"count":NumberInt(10),"remaining":NumberInt(0),"costPerItem":NumberInt(1),"expireDate":ISODate("2020-12-05")},{"_id":ObjectId("63515aeed5f84ecbaac38f26"),"count":NumberInt(102),"remaining":NumberInt(10),"costPerItem":NumberInt(3),"expireDate":ISODate("2020-12-10")},{"_id":ObjectId("63515b04d5f84ecbaac38f2e"),"count":1,"remaining":1,"costPerItem":NumberInt(20),"expireDate":ISODate("2020-12-20")}]}
Query
db.products.aggregate([{$lookup:{from:"stocks",let:{stocks:"$stocks"},pipeline:[{$match:{$expr:{$in:["$_id","$$stocks"]}}},{$project:{_id:0,remaining:1,expireDate:1}}],as:"stock"}},{$set:{remaining:"$stock.remaining",expireDate:"$stock.expireDate"}},{$match:{expireDate:{$lt:ISODate("2020-12-06")},remaining:{$gt:0}}}])