首页 > 解决方案 > 使用 AND 运算符对 mongoose 中的多列进行排序

问题描述

我有一个包含喜欢(计数)、分享(计数)和评论(数组)的视频集合,我想根据最大喜欢、分享和评论对所有视频进行排序。我该怎么做。这是我的架构:

var commentSchema = new Schema({
   user: { type: Schema.Types.ObjectId, required: true, ref: 'User' },
   message: { type: String, required: true },
   like: { type: Number, default: 0 }
})

var videoSchema = new Schema({
  title: { type: String, required: true },
  video: { type: String, required: true },
  like: { type: Number, default: 0 },
  share: { type: Number, default: 0 },
  comments: [commentSchema]
}, { timestamps: true });

var Video = mongoose.model('Video', videoSchema);
module.exports = Video;

标签: node.jsmongodb

解决方案


您可以通过使用sort在 Mongoose 中排序)函数来做到这一点,如下例所示:

Video
  .find({})
  .sort('-like -share -comments')
  .exec((err, _videos) => { ... });

请注意,-字段名称前的符号表示descending,如果省略,它将ascending对该列进行排序。

如果您在comments排序时遇到一些问题,请添加createdAt时间戳字段,然后使用.sort('-like -share -comments.createdAt').


推荐阅读