在Mongo中聚合查询中的两个$Geonear

3

这个集合有两个地理字段:fromLocation和toLocation。但是只允许一个Geonear。

该集合的结构如下:

...............
 fromLocation: {
    type: { type: String, default: "Point" },
    coordinates: [Number],
  },
  toLocation: {
    type: { type: String, default: "Point" },
    coordinates: [Number],
  },
.........................................

请给出一个使用Geonear在两个字段中搜索的示例代码。

我现有的一种只能用于单个字段搜索的代码:

[
  {
    '$geoNear': {
      near: [Object],
      key: 'fromLocation',
      distanceField: 'fromDistance',
      spherical: true
    }
  },
  {
    '$match': {
      status: 2,
      'from.data.city_fias_id': '27c5bc66-61bf-4a17-b0cd-ca0eb64192d6',
      'to.data.city_fias_id': '27c5bc66-61bf-4a17-b0cd-ca0eb64192d6',
      'car.paymentInfo.id': [Object],
      budget: [Object]
    }
  },
  {
    '$lookup': {
      from: 'users',
      localField: 'autor',
      foreignField: '_id',
      as: 'autor'
    }
  },
  { '$unwind': '$autor' },
  { '$addFields': { sortBudget: [Object] } },
  { '$sort': { sortBudget: 1 } },
  { '$group': { _id: null, total: [Object], results: [Object] } },
  { '$project': { total: 1, results: [Object] } }
]

1个回答

0

距离计算相当简单。使用 $geoNear 以利用地理索引来进行更有选择性的条件,使用 $match 和 $expr 进行第二个条件。


对不起,我不理解您的意思。您能否提供一些示例代码,包含两个$Geonears的聚合? - Егор Васильев
根据答案,您只能有一个geonear。 - D. SM
如何获取具有两个字段选择的记录?fromLocation和toLocation - Егор Васильев

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接