Database

[{"name":"test","city":"c1","geom":{"type":"Point","coordinates":[66,33]}},{"name":"test","city":"c1","geom":{"type":"Point","coordinates":[77,22]}},{"name":"test2","city":"c2","geom":{"type":"Point","coordinates":[66,33]}},{"name":"test2","city":"c2","geom":{"type":"Point","coordinates":[77,22]}},{"name":"test2","city":"c2","geom":{"type":"Point","coordinates":[88,44]}}]

Query

db.collection.aggregate([{$group:{_id:{city:"$city",name:"$name"},coordinates:{$push:"$geom.coordinates"}}},{$match:{$expr:{$gte:[{$size:"$coordinates"},3]}}},{$project:{_id:0,city:"$_id.city",name:"$_id.name",type:"Polygon",coordinates:[{$concatArrays:["$coordinates",[{$arrayElemAt:["$coordinates",0]}]]}]}}])

Result