首页 > 解决方案 > 如何按猫鼬中相关对象的数量排序

问题描述

我有两个模型,一个User模型和一个Post模型,Post模型有一个ref引用User模型的字段,我不想在架构中创建嵌入式Post架构User

我想按他们拥有User的 s 数量来订购 s Post,我将如何在 mongoose/and 或 node mongo 驱动程序中执行此操作。

标签: mongodbmongoose

解决方案


如果没有您的架构示例,很难知道您到底想要什么,但我认为这是您需要的:

首先,如果在您的模式中您有一个来自评论总数User的数组,那将会更容易。_id's因为这样你就不会了$lookup

但是,您可以使用以下查询:

  • 首先$lookup加入这两个集合。在这第一阶段,您将创建一个字段,称为post连接数据所在的位置。
  • 然后$set替换大小的值(即用户有多少帖子) -
  • 最后$sort对数据进行排序。
db.User.aggregate([
  {
    "$lookup": {
      "from": "Post",
      "localField": "_id",
      "foreignField": "user",
      "as": "post"
    }
  },
  {
    "$set": {"post": {"$size": "$post"}}
  },
  {
    "$sort": {"post": -1}
  }
])

这里的例子


推荐阅读