提取按英里mongoDB中升序排列的数据

时间:2019-06-07 06:06:37

标签: node.js mongodb mongodb-geospatial

我正在使用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")
}

0 个答案:

没有答案