MongoDB: Приложение по поиску точек на карте6. Точка на карте – Node:
<node id="1063860399" version="6" timestamp="2012-11-
17T05:28:04Z" uid="387715" user="pheliks" changeset="13901897"
lat="43.0260993" lon="44.6502071">
<tag k="amenity" v="restaurant"/>
<tag k="name" v="Троя"/>
</node>
10. public class Node : TagsCollection
{
public long Id { get; set; }
[BsonElement("loc")]
public GeoJson2DCoordinates Location { get; set; }
[BsonElement("lat")]
public double Latitude { get; set; }
[BsonElement("lon")]
public double Longitude { get; set; }
}
11. Пример запроса, который выполняется без индекса:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 7,
"nscannedObjects" : 146811,
"nscanned" : 146811,
"nscannedObjectsAllPlans" : 146811,
"nscannedAllPlans" : 146811,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 1,
"nChunkSkips" : 0,
"millis" : 547,
"indexBounds" : {
},
"server" : "HARVERSTER:27017"
}
13. db.node.find({loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates:
[[[44.6,43.0],[44.7,43.0],[44.7,43.1],[44.6,43.0]]]}}}})
{
"cursor" : "S2Cursor",
"isMultiKey" : true,
"n" : 14506,
"nscannedObjects" : 14506,
"nscanned" : 37853,
"nscannedObjectsAllPlans" : 14506,
"nscannedAllPlans" : 37853,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 241,
"indexBounds" : {
},
"nscanned" : 37853,
"matchTested" : NumberLong(23347),
"geoTested" : NumberLong(23347),
"cellsInCover" : NumberLong(6),
"server" : "HARVERSTER:27017"
}
14. Попробуем найти рестораны:
db.node.find({$and:[{loc:{$geoWithin:{$geometry:{type:"Polygon", coordinates:
[[[44.6,43.0],[44.7,43.0],[44.7,43.1],[44.6,43.0]]]}}}},{"Tags.v":"restaurant"}]})
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 7,
"nscannedObjects" : 146811,
17. Приходите на наши встречи!
http://www.meetup.com/Krasnodar-MongoDB-User-Group
Глеб Лебедев, 2013
gleb@gleblebedev.com