MongoDB排序,计数,查询问题.需要逻辑帮助



我正在尝试实现一些在MongoDB上证明相当困难的事情。

我有 2 个收藏。一个称为"标记",另一个称为"路由",用于保存用户在标记之间创建的路由。路由集合有两个重要字段:[start_marker] 和 [end_marker]。这些字段是标记集合中标记的_ids。

浏览地图时,应用程序会对标记集合进行地理空间框查询,以在地图上查找和显示标记。

当用户单击标记时,气泡将显示标记名称。

在名称下方还有一个动态字段,我遇到了问题。此字段应显示:

  • 从地图上的选定标记驱动到的标记
  • 这些标记被驱动了多少次
  • 只有 3 个最常驱动到标记的标记才会显示在动态字段中

由于我的记录集合记录了 [start_marker] 和 [end_marker] _ids,因此我在 [start_marker] 字段中查询所选标记_id的记录集合。

这将生成几百个文档,其中所选标记始终位于 [start_marker] 字段中。现在,我想对哪个 [end_markers] 出现最多进行排序,计算它们出现的次数,选择前 3 个,获取它们_ids并与他们一起查询标记集合以提取标记名称。

问题是,计数需要我知道要按哪个结束标记字段计数,这反过来又要求我知道它发生的频率。捕获 22。

结束气泡结果如下所示:

城市 1

城市 16 - 256 次

城市 21 - 118 次

城市 4 - 88 次

由于 Mongo 是无模式的,我愿意更改数据库结构,也许在某处添加一个计数字段,但目前我完全不知所措。此查询每秒将发生几百次,因此 map reduce 可能会对数据库性能产生负面影响。一些意见将不胜感激!

我相信

我找到了一个足够简单的答案。

  1. 创建另一个名为"路由"的集合。
  2. 添加 3 个字段:[start_city]、[end_city]、[计数]。
  3. 当用户在"记录"集合中创建文档
  4. 时,还要在"路由"集合中创建文档。
  5. 在 [计数] 字段中添加 1。
  6. 每次在同一路由上保存新记录时,将"routes"集合中的计数再增加 1。
  7. 查看地图标记时,在 [start_marker] 集合中查询marker_id的"路线"集合。按计数排序,将结果限制为 3。

相关内容

  • 没有找到相关文章

最新更新