如何在 mongodb 中搜索数组对象中最近的位置
How to search nearest place in array object in mongodb
mongodb 文档 'contents' 是
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"name" : "4Fingers",
"locations" : [
{
"id" : "locations1",
"address" : "68 Orchard Rd, #B1-07 Plaza Singapura, Plaza Singapura, Singapura 238839",
"phone" : "+65 6338 0631",
"openhours" : "Sunday-Thursday: 11am - 10pm \nFriday/Saturday/Eve of PH*: 11am - 11pm",
"loc" : [
"1.300626",
"103.845061"
]
}
],
"comments" : [ ],
"modified" : 1472271793525,
"created" : 1472012276724,
"createdby" : "Admin",
"modifiedby" : "Admin",
"createdipaddress" : "localhost",
"modifiedipaddress" : null,
"types" : "Restaurant",
"category" : "FoodAndBeverages",
"logo" : "logo4Fingers.png",
"tags" : "western, chicken, restaurant, food, beverages"
}
我想从 HTML5 导航中找到离我的位置最近的地方。我如何查询它?数据应按从近到远的顺序排序。
谢谢。
要查询 mongodb 地理空间数据,您首先需要在您的位置字段上建立地理空间索引。
你的位置字段是字符串,需要是数值类型,你需要相应地更新你的数据。
根据数字位置数据创建索引:
db.collection.createIndex( { "locations.loc" : "2d" });
查询:
var projection = {"locations.loc":1};
var query = {"locations.loc": {"$near":[1.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query, projection).pretty();
//result:
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"locations" : [
{
"loc" : [
1.300626,
103.845061
]
}
]
}
var query2 = {"locations.loc": {"$near":[2.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query2, projection).pretty();
//result:
{}
查询结果将始终排序,最近的文档排在第一位。
谢谢 Sergiu Zaharie。
有效。
那我怎么才能返回所有字段而不是只返回这个字段呢
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"locations" : [
{
"loc" : [
103.845061,
1.300626
]
}
]
}
//编辑
已解决。
我只是清除投影然后它就像魅力一样工作。
谢谢。
mongodb 文档 'contents' 是
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"name" : "4Fingers",
"locations" : [
{
"id" : "locations1",
"address" : "68 Orchard Rd, #B1-07 Plaza Singapura, Plaza Singapura, Singapura 238839",
"phone" : "+65 6338 0631",
"openhours" : "Sunday-Thursday: 11am - 10pm \nFriday/Saturday/Eve of PH*: 11am - 11pm",
"loc" : [
"1.300626",
"103.845061"
]
}
],
"comments" : [ ],
"modified" : 1472271793525,
"created" : 1472012276724,
"createdby" : "Admin",
"modifiedby" : "Admin",
"createdipaddress" : "localhost",
"modifiedipaddress" : null,
"types" : "Restaurant",
"category" : "FoodAndBeverages",
"logo" : "logo4Fingers.png",
"tags" : "western, chicken, restaurant, food, beverages"
}
我想从 HTML5 导航中找到离我的位置最近的地方。我如何查询它?数据应按从近到远的顺序排序。
谢谢。
要查询 mongodb 地理空间数据,您首先需要在您的位置字段上建立地理空间索引。
你的位置字段是字符串,需要是数值类型,你需要相应地更新你的数据。
根据数字位置数据创建索引:
db.collection.createIndex( { "locations.loc" : "2d" });
查询:
var projection = {"locations.loc":1};
var query = {"locations.loc": {"$near":[1.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query, projection).pretty();
//result:
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"locations" : [
{
"loc" : [
1.300626,
103.845061
]
}
]
}
var query2 = {"locations.loc": {"$near":[2.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query2, projection).pretty();
//result:
{}
查询结果将始终排序,最近的文档排在第一位。
谢谢 Sergiu Zaharie。
有效。
那我怎么才能返回所有字段而不是只返回这个字段呢
{
"_id" : ObjectId("57bd1ff410ea3c38386b9194"),
"locations" : [
{
"loc" : [
103.845061,
1.300626
]
}
]
}
//编辑
已解决。
我只是清除投影然后它就像魅力一样工作。
谢谢。