Het probleem met je golang-code is dat je niet hebt gegroepeerd.
U kunt gebruik maken van Pipe
die een pijplijn voorbereidt om te aggregeren:
pipe := db.C(COLLECTION).Pipe([]bson.M{
{"$match": bson.M{"nfType": "AMF"}},
{"$unwind": "$ipv4Addresses"},
{"$group": bson.M{
"_id": "$distance",
"ipv4Addresses": bson.M{"$addToSet": "$ipv4Addresses"},
}},
{"$sort": bson.M{"_id": 1}},
{"$limit": 1},
})
err := pipe.All(&ip)