Mongo map减少或聚合策略

时间:2015-08-21 03:19:15

标签: javascript mongodb

所以我和Mongo一直待在那里,而不必做任何复杂的事情。但现在我反对某事。

我有一个Publisher模型和一个User模型。

  • 用户拥有一个publisherIds数组。
  • so user.following = [1,2,3,4];

我正在构建一个管理员表,我需要向所有发布者及其关注者数量显示。

显然我不能遍历每个发布者并在那里运行mongo查询,那么我应该采取什么方法?

Collection 1 Users

{
    id: 1,
    name: 'fred',
    following: [1,2,3,4],
},{
    id: 2,
    name: 'andy',
    following: [1,2]
},{
    id: 3,
    name: 'stephen',
    following: [1]
}

集合2出版商的期望输出

{
    publisherId: 1,
    numberOfFollowers: 3
},{
    publisherId: 2,
    numberOfFollowers: 2
},{
    publisherId: 3,
    numberOfFollowers: 1
}

1 个答案:

答案 0 :(得分:0)

根据数据大小,Map Reduce策略可以比聚合框架慢一点,速度更快。 MapReduce将在单独的线程中运行JavaScript,并使用您提供的代码发出和减少文档的某些部分,以便在某些字段上进行聚合。您当然可以将练习视为聚合在每个“fieldValue”上。聚合框架也可以做到这一点但速度要快得多,因为聚合将在C ++中在服务器上运行,而不是在单独的JavaScript线程中运行。 还

  

MongoDB聚合管道由阶段组成。每个阶段   在文档通过管道时转换文档。管道   阶段不需要为每个输入生成一个输出文档   文献;例如,某些阶段可能生成新文档或过滤掉   文档。管道阶段可以在管道中多次出现。

enter image description here

更多阅读:Is Mongodb Aggregation framework faster than map/reduce?

在你的例子中,你走了:

enter image description here