【发布时间】:2016-03-10 08:50:04
【问题描述】:
编辑:好的,知道了。它不能通过查找来完成。我以另一种方式解决了这个问题,但它与这个问题完全无关:我添加了一个布尔字段“last_inserted”并使用流星钩子来确保只有最后一个插入的字段具有该字段。总之谢谢大家。
我在一个 Meteor 项目中,有一个这样的集合:
group_id, date, attribute1, attributeN
1, 2015-11-26 09:40:23.000Z, "foo", "bar"
1, 2015-11-23 14:23:53.000Z, "foo", "bar"
2, 2015-11-23 14:24:01.000Z, "foo", "bar"
2, 2015-11-23 14:25:44.000Z, "foo", "bar"
我必须对此进行过滤,并为每个 group_id 获取日期最大的元素,结果如下:
group_id, date, attribute1, attributeN
1, 2015-11-26 09:40:23.000Z, "foo", "bar"
2, 2015-11-23 14:25:44.000Z, "foo", "bar"
我在一些相关问题中读到,它可以使用 aggregate 运算符完成:
MongoDB - get documents with max attribute per group in a collection
但 Meteor 仍然没有实现它,我必须使用 find 来实现它。
我不是 MongoDB 专家,我正在阅读很多 documentation,但我开始担心如果不获取 所有 元素并手动获取,我将无法做到这一点用javascript过滤那些(我真的不喜欢这种解决方案)
我读到有一些添加聚合命令的流星包(如this),但我不知道它们有多可靠,因为这是一个需要坚如磐石的项目
我该怎么做?
【问题讨论】:
-
就像我在问题中写的那样:“我必须过滤这个并为每个 group_id 获取日期最大的元素”。因此,对于具有相同 group_id 的所有项目,我必须只获得日期最大的项目
-
哦,对不起,我的错。我现在解决这个问题:)
-
您了解
.find()的基本功能,不是吗?而且您了解您要的是“分组”边界中具有最大字段值的文档吗?对? (我的意思是,你甚至称它为 group_id )。应该很清楚.find()不能做到这一点,而.aggregate()(特别是“组”的管道阶段)是这样做的工具。当然流星可以使用.aggregate(),它不是独立软件,它使用核心节点驱动程序。您只能在浏览器中.aggregate()。这对数据库来说是件好事。 -
好的,谢谢。我仍然不是“聚合”(失去反应性)的好朋友,我更喜欢以另一种方式解决这个问题
标签: javascript mongodb meteor nosql