Ok, my goal is to perform a text search on my collection and then filter those results to ensure they fall within my "doughnut" geometry. Example from mongo site:

Here's the tough part. Mongo's documentation confirms that today you cannot combine the wonderfulness of $text and $near:
You cannot combine the $near operator, which requires a special geospatial index, with a query operator or command that uses a different type of special index. For example you cannot combine $near with the $text query.
Sooo.. Here is what I'm doing today. Notice my current method does not achieve a "doughnut" geometry (it's is just a circle growing in diameter which return duplicate results as the user "zooms" out on the map).
var vendorResponse = JSON.parse(body);
var vendorPosts = vendorResponse.postings;
//Get the location of the user
var userLat = req.query.lat;
var userLong = req.query.long;
//Get the item that furthest away from the user
var furthestitem = sortedVendorPosts[sortedVendorPosts.length - 1];
//Calculate the radius of the area
var radius = Math.sqrt( Math.pow((userLat-furthestitem.location.lat), 2) + Math.pow((userLong-furthestitem.location.long), 2) )
PostModel.find({
$text: { $search: heading, $language: 'english' },
$or: mongoCategories,
coordinates :
{ $geoWithin :
{
$centerSphere : [ [ userLong, userLat ] , radius ]
}
}
} , { score: {
$meta: "textScore"
}
}, function (err, results) {
});
I've attempted to use mongos $geoIntersects methods but I'm banging my head against the wall to formulate this query. Detailed examples of how to workaround mongos current limitation would be a god-send! Thanks guys!
Seems there are a couple solutions in my case scenario:
Use Mongo's $regex method (as others described and I've demonstrated below).
PostModel.find({
coordinates: { $near: {
$geometry: { type: "Point", coordinates: [ userLong , userLat ] },
$maxDistance: maxDistance,
$minDistance: minDistance
}
},
$or: mongoCategories,
term: { "$regex": term, "$options": 'i' }
}, function (err, results) {
//systematic error. Redirect user so they can report error.
if (err) {
console.log(err);
callback(body);
// if no result found
} else if (!results) {
callback(results);
} else if (results) {
callback(results);
}
});
I've reached out to the Mongodb team to see when we will be able to perform searches across multiple indexes. Hope this is helpful!