使用 geoNear + 过滤匹配的 Mongodb 聚合工作非常慢

问题描述

我有一个包含 2 个集合的基础,每个集合约 45k 行,我正在尝试在以下查询中聚合数据:

{
  $geoNear: {
    near: {
      type: "Point",coordinates: [location.longitude,location.latitude]
    },distanceField: "location.distance",spherical: true
  }
},{
  $lookup: {
    from: "departments",as: "departments",let: { parentDepartmentId: "$parentDepartmentId" },pipeline: [
      {
        $match: {
          $expr: { $eq: ["$$parentDepartmentId","$_id"] },status: "ACTIVE"
        }
      }
    ]
  }
},{
  $match: {
    departments: { $ne: [] }
  }
},{ $skip: 0 },{ $limit: 10 }

在响应中,我得到了按距离排序的数据,它可以工作,但查询执行时间长达 40 秒。移除 departments: { $ne: [] } 阶段后,即使使用 geoNear,查询也会在 ~0.3 秒内执行,反之亦然:如果我移除 $geoNear 阶段并保留 departments: { $ne: [] }查询的运行速度相同.但是 geoNear + match 的组合执行速度非常慢。

有人知道我做错了什么吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...