Sorry but I do not see that behavior. With the example documents:
{
"address" : {
"uppercase" : "14529",
"location" : {
"type" : "Point",
"coordinates" : [ -100.2014, 47.6154 ]
}
}
},
{
"address" : {
"uppercase" : "90210",
"location" : {
"type" : "Point",
"coordinates" : [ -120.2014, 47.6154 ]
}
}
},
{
"address" : {
"uppercase" : "14529",
"location" : {
"type" : "Point",
"coordinates" : [ -120.2014, 47.6154 ]
}
}
}
And with the query:
db.address.find({
"address.uppercase": { "$regex": "^14529" },
"address.location": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [ -122.2103, 47.6154 ]
}
}
}
})
I get these in order of nearest :
{
"address" : {
"uppercase" : "14529",
"location" : {
"type" : "Point",
"coordinates" : [ -120.2014, 47.6154 ]
}
}
},
{
"address" : {
"uppercase" : "14529",
"location" : {
"type" : "Point",
"coordinates" : [ -100.2014, 47.6154 ]
}
}
}
And even with regressing the index type. Perhaps try dropping the index and re-creating it and see of you can reproduce. Otherwise if you possibly have an edge case example that does not fit these conditions, then your question could do with an edit to include the required detail.