如果_id匹配,猫鼬聚合

时间:2020-07-14 12:32:08

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我有一个查询,该查询在Video Model中找到,该查询获取视图,但是我需要根据userId来获取这些视图,例如userId =“ 1xxxxxxxxx13”, 有可能吗?

Video.aggregate(
    [
      {
        $group: {
          _id: null,
          totalViews: {
            $sum: {
              $cond: [{ $eq: ["$userId", id] }, "$views", 0],
            },
          },
        },
      },
    ],
    function (err, data) {
      console.log(data);
      return data;
    }
  );

quer,给我零个视图,但是有一些视图有来自userId的视频的视图 这是架构

const mongoose = require("mongoose");

const videoSchema = new mongoose.Schema({
  ....
  thumbnail: { type: String, required: false },
  title: { type: String, required: false },
  userId: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
  views: { type: Number },
  ....
  
});
videoSchema.index({ title: "text" });
module.exports = mongoose.model("Video", videoSchema);

我需要过滤特定用户的视频

1 个答案:

答案 0 :(得分:0)

看起来您正在计算每个用户的观看次数。

您可以执行以下操作。按用户ID分组并统计视图。它返回用户明智的viewCounts

 [
      {
        $group: {
          _id: $userId,
          totalViews: {
            $sum: "$views",
          }
        }
      }
    ]

如果要明智地过滤用户,可以将{ $match : { "userId" : id}} 添加为聚合中的第一个管道。