Database

[{"date":ISODate("2022-09-25T12:35:51.833Z"),"scans":[{"date":ISODate("2022-09-01T05:00:00.000Z")},{"date":ISODate("2022-08-04T05:00:00.000Z")},{"date":ISODate("2022-09-01T05:00:00.000Z")},{"date":ISODate("2022-09-06T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T12:55:12.018Z"),"scans":[{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1926-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")},{"date":ISODate("1919-11-30T07:00:00.000Z")}]},{"date":ISODate("2022-09-25T13:49:20.639Z"),"scans":[{"date":ISODate("2022-09-15T05:00:00.000Z")},{"date":ISODate("2022-09-12T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T13:58:02.755Z"),"scans":[{"date":ISODate("2022-09-13T05:00:00.000Z")},{"date":ISODate("2022-08-20T05:00:00.000Z")},{}]},{"date":ISODate("2022-09-25T14:17:04.947Z"),"scans":[{"date":ISODate("2022-09-12T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T14:17:49.489Z"),"scans":[{"date":ISODate("2022-09-13T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T14:19:26.068Z"),"scans":[{}]},{"date":ISODate("2022-09-25T14:20:07.569Z"),"scans":[{"date":ISODate("2022-09-12T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T14:33:17.783Z"),"scans":[{"date":ISODate("2022-08-15T07:00:00.000Z")}]},{"date":ISODate("2022-09-25T14:33:41.050Z"),"scans":[{"date":ISODate("2022-08-19T07:00:00.000Z")}]},{"date":ISODate("2022-09-25T14:34:03.172Z"),"scans":[{"date":ISODate("2022-09-07T07:00:00.000Z")}]},{"date":ISODate("2022-09-25T15:28:23.723Z"),"scans":[{"date":ISODate("2022-08-19T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T15:28:49.211Z"),"scans":[{"date":ISODate("2022-09-09T05:00:00.000Z")}]},{"date":ISODate("2022-09-25T15:29:49.211Z"),"scans":[{"date":ISODate("2022-09-25T15:29:49.212Z")}]}]

Query

db.collection.aggregate([{"$match":{"$expr":{"$reduce":{"input":"$scans","initialValue":false,"in":{"$or":["$$value",{/** is scans date missing?*/"$eq":[{"$type":"$$this.date"},"missing"]},{/** is scans date older than 90 days?*/"$gt":[{"$dateDiff":{"startDate":"$$this.date","endDate":"$date","unit":"day"}},90]},{/** is scans date after doc date?*/"$gt":["$$this.date","$date"]}]}}}}}])

Result