【问题标题】:How can I sum values from different documents in the same collection?如何对同一集合中不同文档的值求和?
【发布时间】:2021-04-01 00:29:01
【问题描述】:
I have photos with an array of likes. I am using mongoose as a db. I want to sum all the numeric values in the likes count of photo collection.
    exports.getAnalytics = (req, res) => {
  if (!req.user) {
    return res.redirect('/login');
  }
  Campaign.findOne({slug:req.params.slug}, (err, campaign) => {
    PhotoEntries.find({ CampaignId: campaign._id}, ['Photo','Name', 'done' ,'likes_count', ], {sort:{ _id: -1} }, function(err, photos) {
      
      PhotoEntries.countDocuments({CampaignId: campaign._id} , function (err, count) { 
          PhotoEntries.aggregate([
            {
              $group: {
                _id: "$CampaignId",
                Totallikes: { $sum: "$likes_count" }
              }
            }
          ]) 
    if(req.user){
      console.log(photos);
      res.render('admin/analytics', {
        title: 'Analytics',
        campaign: campaign,
        photolist : photos, 
        Count:count ,
        Totallikes: Totallikes  
        });
    }
  // }
  // ])

  });
  });
  });
  }   

但是它不起作用。错误是Arguments must be aggregate pipeline operators. 我怎样才能做到这一点?
这是我的架构代码。 var photoSchema = 新架构({ 名称:{类型:字符串}, 电子邮件:{类型:字符串}, 照片:{类型:字符串}, 说明:{类型:字符串}, 电话号码:{类型:字符串}, 活动 ID:{ 类型:Schema.Types.ObjectId, ref: '广告系列', },

        done: {
          type: Boolean  ,
      },
    
      likes_count: Number ,default: 0,
        likedBy: [
          {
              type:Schema.Types.ObjectId,
              ref: "User"
          }
      ], 
      });
      }

我需要将likes_count 字段添加到集合中的所有文档中。

【问题讨论】:

  • 您能否在您的问题和预期结果中添加照片集架构。
  • 你想做什么?您需要在集合中添加新字段吗?还是只需要通过聚合进行计数和检索?你的问题不清楚。
  • 通过聚合只计算和检索

标签: mongodb express mongoose


【解决方案1】:

你错过了输入_id, 按指定的_id 表达式对输入文档进行分组,对于每个不同的分组,输出一个文档。每个输出文档的_id 字段包含唯一的按值分组。更多信息请参考$group

PhotoEntries.aggregate([
  {
    $group: {
      _id: null,
      Totallikes: { $sum: "$likes_count" }
    }
  }
])

Playground

【讨论】:

  • 什么是id:null是什么意思,还是看不懂?
  • 它需要输入,它将如何知道按此字段分组,您可以指定_id: "$CampaignId"这将按该ID分组,--但现在我们需要对所有文档进行分组所以_id: null这个将对所有文档进行分组。有关更多信息,请从答案中提供的 $group 链接中获取示例演示。
  • 我添加了但无法将 Totallikes 变量发送到前端。它显示错误 Totallikes undefined
  • $match 阶段以上可能没有匹配文档,删除该阶段并重新测试。
  • 我在上面编辑过,请查看完整路线
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2011-06-05
  • 2021-07-13
  • 2015-01-28
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多