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

时间:2013-01-31 10:03:09

标签: mongodb mapreduce nosql

我正在努力实现MongoDB已经证明相当困难的东西。

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

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

当用户点击标记时,气泡会显示标记名称。

在名称下方还有一个我遇到问题的动态字段。这个字段应该显示:

  • 从地图上选定的标记驱动的标记
  • 这些标记被驱使多少次
  • 动态字段
  • 中仅显示3个最常用于标记的标记

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

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

问题是,count需要我知道要计算哪个结束标记字段,这反过来要求我知道它发生的频率。赶上22。

结束气泡结果如下所示:

城市1

城市16 - 256次

城市21 - 118次

城市4 - 88次

我愿意改变数据库结构,因为Mongo是无模式的,可能在某个地方添加一个计数字段,但此刻我完全失去了。此查询每秒会发生几百次,因此map reduce可能会对数据库性能产生负面影响。一些意见将非常感谢!

1 个答案:

答案 0 :(得分:0)

我相信我找到了一个简单的答案。

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