MongoDB:涉及集合查找的批量操作



我的项目使用MongoDB和NodeJS(带有Mongoose(。

我有一个名为places的不断增长的大型集合,其中每个place都有一个GeoJSON属性,包含其lat/lon坐标;以及zones的第二静态集合,每个集合包含指定zone的轮廓的GeoJSON多边形。我需要为每个新的place添加一个属性matching_zones,它列出了与其位置相交的zone文档。

我目前正在通过一个自动任务来完成这项工作,该任务执行以下操作:

  1. places中检索流中尚未具有zones属性的所有文档(我使用的是StreamWorkerNodeJS模块,它允许我调整并发级别(
  2. 对于每个文档,在zones集合中查找此place的位置$geoIntersectzone的多边形一致的所有文档
  3. 更新文档并告诉StreamWorker已完成处理

至少在更新方面,这是相对低效的,所以我打算将其修改为使用unorderedBulkOp进行更新,这样我就设置了一个批量操作,每N个文档我执行一次批量操作并启动一个新的操作,然后当所有文档都处理完后,我执行最后的批量操作。

我想知道的是:有没有办法以某种方式将Node从循环中删除?我已经使用了MongoDB聚合管道的$lookup操作符,效果非常好,我想知道是否可以在更新操作中进行类似的操作。

经过进一步的挖掘和实验,我得出了这样的结论:不,这是不可能的。Mongo 4.2允许您将聚合管道合并到findAndUpdate命令中,但不支持$lookup阶段。

如果有人知道其他一些聪明的技巧,那就太棒了,所以要等几天才能把它标记为正确的。

最新更新