我有一个集合,它通过字段“类型”进行聚合和分组。最终结果应该是每种类型中最多五个文档。但如果我在组前限制,则只有五个第一个文档将被分组。如果我在小组之后限制,前五种类型将返回。
有没有办法在不为每种类型执行find()的情况下执行此操作,限制为5并合并所有结果?
答案 0 :(得分:-3)
如果您可以使用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”函数可能就是你想要的。