Database
[{"tableId":1,"itemId":10,"name":"City","value":"London"},{"tableId":1,"itemId":10,"name":"StartYear","value":"2017"},{"tableId":1,"itemId":20,"name":"City","value":"Paris"},{"tableId":1,"itemId":20,"name":"StartYear","value":"2018"},{"tableId":2,"itemId":30,"name":"City","value":"Madrid"},{"tableId":2,"itemId":30,"name":"StartYear","value":"2016"}]
Query
db.collection.aggregate([{"$match":{tableId:1}},{"$group":{_id:{itemId:"$itemId"},result:{$push:"$$ROOT"}}},{"$addFields":{"result":{"$map":{"input":"$result","as":"r","in":{"$cond":{"if":{$eq:["$$r.name","StartYear"]},"then":{"_id":"$$r._id","itemId":"$$r.itemId","name":"StartYear","tableId":"$$r.tableId","value":{$toInt:"$$r.value"}},"else":"$$r"}}}}}},{"$match":{$and:[{"result":{$elemMatch:{"name":"City","value":"London"}}},{"result":{$elemMatch:{"name":"StartYear","value":{$lte:2018}}}}]}}])