【问题标题】:How can I get the min/max value of a sub-array in MongoDB?如何获取 MongoDB 中子数组的最小值/最大值?
【发布时间】:2011-09-01 00:13:00
【问题描述】:

所以我有一种情况,我使用数组标记文档,例如:

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

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

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

到目前为止,我能找到的唯一解决方案是做一个 map/reduce 来遍历记录并找到该标签的最大值,添加一个并保存。现在,大多数记录可能每个只有 2-3 个标签,但理论上可能有 10-15 个。无论哪种方式,一旦有很多标签和很多记录,map/reduce 似乎都需要付出巨大的努力......

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

编辑:

让我详细介绍一下我正在尝试解决的问题...我正在幻灯片/轮播中显示图像。幻灯片涵盖了不同的类别,因此使用上面的类别/标签,您可以查看所有图像,或者只查看来自住房、零售、股票等的图像。现在我只有少数定义的类别,但它相当这些可能会随着时间的推移而扩大。它们需要按标签过滤,并按日期排序(最新的优先)。

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

但是为了对轮播上的图像进行“分页”,我必须知道该图像在结果中的位置……而无需实际获取所有结果并进行计数。所以我认为对他们进行排名是可行的方法,但这也会导致其他问题。我真的不喜欢仅仅为了存储排名而创建另一个集合的想法,但这可能是最有效的方式。

【问题讨论】:

    标签: mongodb mapreduce max min


    【解决方案1】:

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

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

    【讨论】:

    • 是的,使用此标签文档,您可以轻松找到排名编号。如果你真的需要去规范化并且在“主文档”中也有标签和排名数字,你就这样添加它,不需要大搜索。
    • 聊了很多,并添加了更多关于我要解决的问题的背景知识。谢谢!
    猜你喜欢
    • 2021-11-08
    • 2023-03-18
    • 2021-02-14
    • 2017-05-24
    • 2013-09-20
    • 1970-01-01
    • 2010-11-23
    • 2011-08-16
    • 2012-03-14
    相关资源
    最近更新 更多