To po prostu nieprawda,
„aby skorzystać z indeksów przestrzennych w Mongo, potrzebujesz kolekcji indeksowanej przestrzennie zawierającej tylko zapis dla każdego punktu wielokąta, z dodatkową wartością identyfikatora rekordu rekordu przestrzennego mieszkającego w innej kolekcji, a następnie użyj zapytanie pola ograniczającego, aby uzyskać identyfikatory rekordów z jednej [kolekcji] i wybrać [nagrać dane] z drugiej [kolekcji], skutecznie emulując sprzężenie. ”
Mam dane punktów USGS przechowywane w jednej kolekcji Mongo z rekordami, które wyglądają tak:
> 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" }
Jestem w stanie wykonać zapytania o pola ograniczające na tych danych, które zwracają cały rekord (bez potrzeby kolejnej kolekcji).
Pytanie:
> 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);
Odpowiedź:
{ "_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 zapewnia także możliwość wyszukiwania najbliższych sąsiadów, a także wyszukiwania wielokątów. Jest to dobrze udokumentowane na mongodb.org