Получать данные в порядке возрастания в милях mongoDB
Я использую MongodbDB Geospatial
запрос для извлечения данных в пределах определенных миль и использования $geoWithin
а также $centerSphere
для того же. Это выборка данных в случайных милях, т. Е. Означает, что они не выбираются в порядке возрастания, но я хочу получить данные в порядке возрастания тисков в соответствии с милями.
Например: если я хочу получить данные в пределах 100 миль, и в БД существует 3 документа размером 16 миль, 38 миль и 92 мили.
затем первый документ, который он должен получить, составляет 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")
}