2011-05-24 146 views
1

所以我有一个情况我使用数组标记文件,如:如何获取MongoDB中的子数组的最小/最大值?

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

我只是节省了标签本身,但最近增加的数字,因为我需要知道排名/位置。因此,标签旁边的数字代表用该标签标记的文档集合中文档的排名。

它变得棘手的几个地方,但现在我只是想弄清楚我如何添加其他文件与一个或多个这些标签。假设我创建一个新文档并将其标记为“房屋”。它的等级需要设置为11,但我怎么知道这一点?

唯一的解决办法,我已经能够到目前为止发现是做的map/reduce要经过的记录,并找到最大值为标记,添加一个和保存。现在,大多数记录可能只有2-3个标签,但理论上可能有10-15个。无论哪种方式,似乎地图/减少将需要一个强大的努力,一旦有大量的标签和大量的记录...

有没有更简单的方法,或者我应该开始寻找另一种解决方案来解决这个问题?

编辑:

让我给你约我试图解决...我在幻灯片/轮播显示图像的问题,更详细一点。该幻灯片涵盖了不同的类别,因此使用上面的类别/标签,您可以查看所有图像,或仅查看来自住房,零售,股票等的图像。目前,我只有少数几个已定义的类别,但它相当这些可能会随着时间的推移而扩大。他们需要通过标签过滤,并按日期排序(最新的第一个)。

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

但为了在转盘上,以“分页”的图片,我必须知道的结果图像的位置......没有实际得到的所有结果和计数。所以我认为在他们身上放上一个等级就是要走的路,但也会导致其他问题。我不太喜欢创建另一个集合来存储行列的想法,但这可能是实现它的最有效的方式。

回答

2

你需要什么的排名?这是否更新?如果不是,并且排名一直在增加,您不能仅仅根据日期对特定标签的文档进行排序吗?

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

+0

是的,通过这个标签文档,您可以轻松找到等级编号。如果你真的需要非规范化并在“主文档”中包含标签和等级编号,则可以像这样添加它,不需要大的搜索。 – oma 2011-05-25 14:59:23

+0

得到所有健谈,并添加一些更多的背景,我想在这里解决上述问题的问题。谢谢! – 2011-05-26 15:27:35

相关问题