【发布时间】:2013-12-05 11:53:56
【问题描述】:
我有一个集合,它按“类型”字段进行聚合和分组。最终结果应该是每种类型最多只有五个文档。但是如果我在分组之前限制只有五个第一个文档将被分组。如果我在组之后限制前五种类型将返回。
有没有办法做到这一点,而无需为每种类型执行 find(),限制为 5 并合并所有结果?
【问题讨论】:
标签: mongodb
我有一个集合,它按“类型”字段进行聚合和分组。最终结果应该是每种类型最多只有五个文档。但是如果我在分组之前限制只有五个第一个文档将被分组。如果我在组之后限制前五种类型将返回。
有没有办法做到这一点,而无需为每种类型执行 find(),限制为 5 并合并所有结果?
【问题讨论】:
标签: mongodb
如果您可以使用 C#(根据我对 mongodb 的快速谷歌搜索),您可以使用具有“ResultSelector-Function”的 GroupBy 之一来执行此操作,如下所示:
var groups = Enumerable.Range(0, 1000).
GroupBy(
x => x/10,
(key, elements) => new { Key = key, Elements = elements.Take(5) }
);
关于此代码的速度 - 我相信该组在结果选择器被实例化之前已完全构建 - 因此在输入序列上自定义 foreach 并手动构建组可能会更快(如果您能以某种方式确定何时完成)
P.S.:再想一想 - 我怀疑我的答案是你想要的。我查看了 mongo-DB 文档,“map”结合合适的“reduce”函数可能正是您想要的。
【讨论】: