我正在使用MongodbDB Geospatial
查询来获取特定英里范围内的数据,并使用$geoWithin
和$centerSphere
进行相同的查询。它正在获取随机里程表的数据,这意味着不按升序获取数据,但我想以根据里程的升序表的数据获取数据。
例如::如果我想获取100英里范围内的数据,并且16英里,38英里和92英里的数据库中存在3个文档。
然后应提取的第一个文档为16英里,第二个为38英里,最后一个为92英里。
我正在使用以下查询来获取数据:
if (req.query.radius) {
var coordinates = '75.34121789,30.1471305';
let queryBuilder["shop.shopInfo.address"] = {
$geoWithin : {
$centerSphere: [coordinates,(parseInt(req.query.radius)/3959)]
}
};
}
Products.aggregate([
{
$lookup : {
from:"shops",
localField:'shop',
foreignField:'_id',
as:"shop"
}
},
{
$match: queryBuilder
}
]).then((products)=>{
res.json(products);
})
以下是商店和产品系列供参考:
商店
{
"_id" : ObjectId("5cef976852e7ca2f48feec68"),
"shopInfo" : {
"name" : "Rajat Baker's and Sweets",
"address" : {
"type" : "Point",
"_id" : ObjectId("5cef976852e7ca2f48feec69"),
"coordinates" : [
35.9349341,
31.9561535
]
},
"maximum_delivery_radius" : 25
}
}
产品
{
"_id" : ObjectId("5ce7a01757e96237ec5e49dc"),
"name" : "Sandwich",
"description" : "Tasty Sandwich",
"price" : 30,
"max_delivery_radius" : 92,
"shop" : ObjectId("5cef976852e7ca2f48feec68")
},
{
"_id" : ObjectId("5ce7a01757e96237ec5e49da"),
"name" : "Banana Shake",
"description" : "Tasty banana shake with dry fruits",
"price" : 40,
"max_delivery_radius" : 16,
"shop" : ObjectId("5cef976852e7ca2f48feec62")
},
{
"_id" : ObjectId("5ce7a01757e96237ec5e49dt"),
"name" : "pizza",
"description" : "Tasty pizza",
"price" : 15,
"max_delivery_radius" : 38,
"shop" : ObjectId("5cef976852e7ca2f48feec68")
}