Ce n'est tout simplement pas vrai,
"Pour tirer parti des index spatiaux dans Mongo, vous auriez besoin d'une collection indexée spatialement ne contenant qu'un enregistrement pour chacun des points du polygone, avec une valeur supplémentaire pour l'ID d'enregistrement de votre enregistrement spatial vivant dans une autre collection, puis utilisez un "Boîte de délimitation pour obtenir les ID d'enregistrement d'une [collection] et sélectionner [les données d'enregistrement] de l'autre [collection], en émulant efficacement une jointure".
J'ai des données de points USGS stockées dans une seule collection Mongo avec des enregistrements qui ressemblent à ceci:
> db.names.find({FEATURE_NAME: 'Mount Saint Helens', STATE_ALPHA: 'WA'})
{ "_id" : ObjectId("4e262106d7a99b7db41a4919"),
"_ID" : 1525360,
"FEATURE_NAME" : "Mount Saint Helens",
"FEATURE_CLASS" : "Summit",
"STATE_ALPHA" : "WA",
"STATE_FIPS" : 53,
"COUNTY_NAME" : "Skamania",
"COUNTY_FIPS" : "059",
"COORDS" : [ -122.1944, 46.1912 ],
"ELEV_IN_FT" : "8356" }
Je suis capable de faire des requêtes de boîte englobante sur ces données qui retournent très bien l'enregistrement entier (sans avoir besoin d'une autre collection).
Question:
> box = [[-126.562500,45.089036], [-123.750000,47.040182]]
[ [ -126.5625, 45.089036 ], [ -123.75, 47.040182 ] ]
> db.names.find({"COORDS" : {"$within" : {"$box" : box}}, FEATURE_CLASS: "Summit"}, {FEATURE_NAME: true, COUNTY_NAME: true, STATE_ALPHA: true, ELEV_IN_FEET: true}).limit(5);
Réponse:
{ "_id" : ObjectId("4e2620f8d7a99b7db4146cec"), "FEATURE_NAME" : "Harlocker Hill", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Coos" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414a349"), "FEATURE_NAME" : "Neskowin Crest", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414a105"), "FEATURE_NAME" : "Miles Mountain", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db414934a"), "FEATURE_NAME" : "Mount Gauldy", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Tillamook" }
{ "_id" : ObjectId("4e2620f8d7a99b7db4149d06"), "FEATURE_NAME" : "Little Hebo", "STATE_ALPHA" : "OR", "COUNTY_NAME" : "Yamhill" }
Mongo offre également la possibilité d'effectuer des recherches de voisins les plus proches, ainsi que des recherches de points dans les polygones. Ceci est bien documenté sur mongodb.org