首页 > 解决方案 > 如何在 mongoDB 中获取按受欢迎程度(大多数用户最喜欢的)排序的电影列表?

问题描述

我有以下电影 api 项目的架构。

var MovieSchema = new Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String
    },
    genre: {
        type: String
    },
    release_date: {
        type: Date,
        required: true
    }
});
const userSchema = new Schema({
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true, minlength: 6 },
    favourite_movies: [{
        type: Schema.Types.ObjectId,
        ref: "Movie"
    }]
});

请注意,由于项目的其他功能限制,架构很难更改。

如何获取此模式的所有电影按受欢迎程度(大多数用户最喜欢)排序的列表?

标签: node.jsmongodbexpressmongoose

解决方案


您可以为此使用聚合管道。可以尝试类似的东西

MovieModel.aggregate(
  [
    {
      $lookup: {
        from: "users", // user collection name
        localField: "_id",
        foreignField: "favourite_movies",
        as: "user",
      },
    },
    {
      $addFields: {
        count: { $size: "$user" },
      },
    },
    {
      $sort: { count: -1 },
    },
    {
      $unset: ["user", "count"],
    },
  ],
  (err, data) => {
    if (err) console.log(err);
    else console.log(data);
  }
);

推荐阅读