首页 > 解决方案 > 如何在 mongodb / mongoose 中对嵌套字段进行排序

问题描述

我试图按日期对评论进行排序,但我做不到正确。

   {
        "_id": "5defc10b8e753623b4ad0adf",
        "title": "bla bla",
        "owner:"idToPopulate",
        "comments": [
            {
                "_id": "5dfc2185e62103121cfc0f18",
                "reply": "1",
                "replyDate": "2019-12-10T16:00:11.228Z"
            },
            {
                "_id": "5dfc218be62103121cfc0f19",
                "reply": "2",
                "replyDate": "2019-13-10T16:00:11.228Z"
            }
        ]
    }

这是我尝试的方式(结果必须是,按上次日期对评论进行排序

.sort({"comments.replyDate":1})

标签: mongodbmongoose-schema

解决方案


使用$sort您可以对数据进行排序,但在使用之前,您必须拆分数组。试试这个 mongo 查询:

 db.collection.aggregate([
  {
    $unwind: {
      path: "$comments"
    }
  },
  {
    $sort: {
      "comments.replyDate": -1
    }
  },
  {
    $group: {
      _id: "$_id",
      comments: {
        $push: {
          _id: "$comments._id",
          item: "$comments.reply",
          date: "$comments.replyDate"
        }
      }
    }
  }
])

推荐阅读