Получать данные в порядке возрастания в милях mongoDB - PullRequest
1 голос
/ 07 июня 2019

Я использую запрос 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")
}
...