Пн goose совокупно, если _id совпадает - PullRequest
1 голос
/ 14 июля 2020

У меня есть запрос, который находит в модели видео, которая получает просмотры, но мне нужны эти представления в соответствии с 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, дает мне ноль просмотров, но есть просмотры, есть просмотры видео от этого пользователя с идентификатором пользователя, вот схема

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);

Мне нужно отфильтровать видео определенного c пользователя

1 Ответ

0 голосов
/ 14 июля 2020

Похоже, вы подсчитываете просмотры для каждого пользователя.

Вы можете сделать как показано ниже. Группируйте по идентификатору пользователя и подсчитывайте просмотры. Он возвращает количество просмотров для каждого пользователя

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

Если вы хотите фильтровать пользователей, вы можете добавить { $match : { "userId" : id}} в качестве первого конвейера в агрегации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...