按相关文档位置

时间:2016-03-19 11:42:45

标签: mongodb

我有3个收藏品:

  • 供应商(_id,title)
  • 产品(_id,title,vendorId)
  • vendor.location(_id,coords,vendorId)

每个供应商都有多个地点(最多10,000个)和多个产品(最多10,000个)。

我需要在指定位置附近找到所有产品,然后按距离对它们进行排序。

到目前为止我所得到的是:

1)查找指定位置附近的所有供应商:

db.collection('vendor.locations').aggregate([
  {
    $geoNear: {
      near: givenLocation,
      distanceField: 'distance',
      maxDistance: 1000,
      limit: 1000,
      spherical: true
    }
  },
  {
    $group: {
      _id: "$vendor",
      distance: {$min: "$distance"}
    }
  },
  {
    $sort: {distance: -1}
  }

]);

2)使用$ in运算符查找匹配供应商的所有产品,但AFAIK不保证匹配项目的顺序。

  db.collection('products').aggregate([
  {
    $match: {
      vendor: {$in: vendorIds}
    }
  },
  {
    $sort: {} //is it possible to sort items by their position in vendorIds array? 
  },
  {
    $limit: limit
  },
  {
    $skip: skip
  }

因此,基本上问题归结为找到一种对产品进行分类的方法。

另一个可能的解决方案是将供应商位置非规范化为产品位置,但收集的潜在规模(和地理索引)令我担忧。产品集合最多可达1M,最多可嵌入10K嵌入式阵列,因此可以在地理索引中生成10B项目。有多糟糕?

0 个答案:

没有答案