我正在尝试使用expressjs和mongodb按喜欢的次数对帖子进行排序。

   get "postsByLikes/:category", (req, res, next) ->
      category = req.params.category
      db.posts.aggregate([
        {$match:
          type: "post"
          category: category}
        {$project:
          likesCount:
            $size: "like"}
        {"$sort":
          "likesCount": -1}
      ]).toArray (err, posts) ->

        res.send(posts)


这个查询怎么了?

最佳答案

您没有提到输出是什么,但是根据您的代码,您似乎只获得没有源文档的数字。原因是您使用了:

{$project:
      likesCount:
        $size: "like"}


得到计数。问题是$project仅返回指定的字段(在这种情况下,仅返回likesCount)。要解决此问题,您需要$addFields而不是$project来获取源文档和新的计算字段:

{$addFields:
      likesCount:
        $size: "$like"}

08-19 03:17