如何获取MongoDB中子数组的最小/最大值?

时间:2011-05-24 14:31:12

标签: mongodb mapreduce max min

所以我的情况是我使用数组标记文档,例如:

tags: [
   'Housing' : 10,
   'Retail'  : 1,
   'Stocks'  : 25,
]

我只是自己保存标签,但最近添加了数字,因为我需要知道排名/位置。因此,标记旁边的数字代表用该标记标记的文档集中的文档的等级。

在一些地方它变得棘手,但现在我只想弄清楚如何用一个或多个这些标签添加另一个文档。假设我创建了一个新文档并将其标记为Housing。它的等级需要设置为11,但我怎么知道呢?

到目前为止,我能找到的唯一解决方案是执行map / reduce来查看记录并找到该标记的最大值,添加一个并保存。现在,大多数记录可能每个只有2-3个标签,但理论上可能有10-15个标签。无论哪种方式,一旦有很多标签和大量记录,map / reduce似乎会花费大量精力......

有没有更简单的方法,还是我应该开始寻找另一个解决此问题的方法?

修改

让我给你一些关于我正试图解决的问题的更多细节...我正在幻灯片/旋转木马中显示图像。幻灯片显示不同的类别,因此使用上面的类别/标签,您可以查看所有图像,或者只查看住房,零售,股票等的图像。现在我只有一些已定义的类别,但它很可能会随着时间的推移而扩大。它们需要按标签过滤,并按日期排序(最新的第一个)。

现在,到目前为止,我一直在这样做。当我想在卡座中间选择任意图像时,会出现问题。假设您要加载6个月前上传的“housing_chart.gif”。我不想加载6个月的图像以获得该图像(这基本上就是我现在正在做的事情)。相反,我想加载该特定图像,然后能够为下一个/上一个图像分页。

但是为了对旋转木马上的图像进行“分页”,我必须知道结果中图像的位置......而不是实际获得所有结果和计数。因此,我认为对它们进行排名是可行的方法,但这也会导致其他问题。我真的不喜欢创建另一个集合只是为了存储排名的想法,但这可能是最有效的方法。

1 个答案:

答案 0 :(得分:2)

你需要什么排名?这有没有更新?如果没有,如果等级总是在增加,你不能只按日期对特定标签的文件进行排序吗?

我认为关于等级的信息确实属于“标签”而不是文件,即。每个标签都应该有一个带有此标签的相关文档列表 - 然后该列表中的位置可以定义列表。