Node.js 我想获得20张拥有最高浏览量+喜欢次数的记录,在mongoose中我该怎么做?

Node.js 我想获得20张拥有最高浏览量+喜欢次数的记录,在mongoose中我该怎么做?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个模式如下: 我想获得视图+喜欢次数最多的20条记录,在mongoose中该怎么办?我知道一次操作无法做到这一点,但您可以添加一个单独的字段,其中包含视图+喜欢,用户排序desc+limit:20您可以使用它来获取喜欢的数量,并将其与另一个项目以及视图和喜欢的内容联系起来 db.demo.aggregate([{ $project: { likes: { $size: "$likes" }, views: 1, } }, { $project

我有一个模式如下:


我想获得视图+喜欢次数最多的20条记录,在mongoose中该怎么办?

我知道一次操作无法做到这一点,但您可以添加一个单独的字段,其中包含视图+喜欢,用户排序desc+limit:20

您可以使用它来获取喜欢的数量,并将其与另一个项目以及视图和喜欢的内容联系起来

db.demo.aggregate([{
  $project: {
    likes: {
      $size: "$likes"
    },
    views: 1,
  }
}, {
  $project: {
    total: {
      $add: [
        "$likes", "$views"
      ]
    }
  }
},{ 
  $sort : { 
    total : -1
  } 
},{ 
  $limit : 20 
}])

请编辑您的问题以包含实际的JSON,而不是它的图片。我注意到您编辑了您的问题以删除JSON-不知道为什么,因为这是正确的方法,尽管您应该将其正确格式化。有一个代码格式化按钮可以帮助您完成此操作。如何获取每行的列元素数?列likes是arraydb.post.find[{},{$project:{likes\u size:{$size:$likes}}},]当前我得到likes列likeCount的大小。但是,如果我想获取表中的所有列并添加一个likeCount列,该怎么办?这是我的代码:model.aggregate[{$project:{likes:true,view:true,likeCount:{$size:$likes+$views}}}}],err,documents=>console.infodocuments$size:$likes+$views这是错误的,正如我说的,您不能在一个请求中完成它谢谢。是的。我想得到100张总记录数最高的记录。但如果我想根据条件过滤100条记录,这是不可能的。我不知道如何将聚合与查找查询结合起来。另一个问题是,在我获取最后一个记录数后,如何获取记录总数?不要将聚合与查找结合起来,使用管道中的$match根据您的偏好进行筛选谢谢先生。但我似乎看不到你的答案中有疑问。如果我想根据条件筛选20条记录,这是不可能的。我不知道如何将“聚合”与“查找查询”结合起来。您是要筛选最后20条记录,还是要筛选整个集合以获得20条记录?这是一个很好的答案!请记住,沿着这条路线,您将扫描集合的所有索引键或文档,以计算视图/类计数。聚合通常性能很好,对于一个小集合来说,这不应该是一个问题,但是如果性能开始成为问题,那么遵循Erop的建议并创建和跟踪一个新的viewAndLikeCount字段,您可以对其进行索引,这可能是值得的。