【问题标题】:node.js+mongodb sorting nested array is not workingnode.js+mongodb 排序嵌套数组不起作用
【发布时间】:2026-01-04 12:00:02
【问题描述】:

我无法对嵌套数组进行排序。我已经引用了许多链接,例如link 1,但我仍然没有找到适合我的问题的解决方案。

这是我的 JSON 数据:

{
  _id: "5a8bf7e3903cc83237ebd014",
  prospect_name: "Akruthi",
  phone: "9878979879",
  email: "",
  address: "Kundapur",
  landmark: "Grt",
  city: "Udupi",
  state: "5a869c795eb34ecae3ab1ef6",
  region: "5a8689725eb34ecae3ab1ede",
  methodology: 2,
  sub_category: "colour",
  created_by: "asdadasad",
  referred_by: "Self",
  remarks: [
          {
            data: "Good",
            user: "5a8c0642903cc83237ebd01f",
            created_at: "2018-02-20T10:26:43.686Z",
            remarksId: "5a8bf7e3903cc83237ebd013",
          },
          {
            data: "test 1",
            user: "5a858129e6e8f6724d6aa551",
            created_at: "2018-02-21T04:35:30.615Z",
            remarksId: "5a8cf7122ad6f00da98a3f05",
          },
          {
            data: "test 2",
            user: "5a858129e6e8f6724d6aa551",
            created_at: "2018-02-21T04:41:45.514Z",
            remarksId: "5a8cf889160046121e3f1b25",
          },
          {
            data: "test 3",
            user: "5a858129e6e8f6724d6aa551",
            created_at: "2018-02-21T04:54:01.018Z",
            remarksId: "5a8cfb69ea4e7c14c1f7c550",
          },
         ],
  created_at: "2018-02-20T10:26:43.686Z"
}

我在node.js中做了如下查询:

return collection_name
 .aggregate([
                { $match: { _id: objectid(id) } },
                { $lookup: { from: 'state', localField: 'state', foreignField: '_id', as: 'state_details' } },
                { $lookup: { from: 'region', localField: 'region', foreignField: '_id', as: 'region_details' } },
                { $lookup: { from: 'users', localField: 'remarks.user', foreignField: '_id', as: 'remarks_details' } },
                { $unwind: '$remarks' },
                { $sort: { 'remarks.created_at': -1 } },
                { $group: { _id: '$_id', remarks: { $push: '$remarks' } } },
            ])

我得到的结果是:(得到排序的结果,但丢失了其他字段)

{
 _id: "5a8bf7e3903cc83237ebd014",
 remarks: [
        {
          data: "test 3",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:54:01.018Z",
          remarksId: "5a8cfb69ea4e7c14c1f7c550"
        },
        {
          data: "test 2",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:41:45.514Z",
          remarksId: "5a8cf889160046121e3f1b25"
        },
        {
          data: "test 1",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:35:30.615Z",
          remarksId: "5a8cf7122ad6f00da98a3f05"
        },
        {
          data: "Good",
          user: "5a8c0642903cc83237ebd01f",
          created_at: "2018-02-20T10:26:43.686Z",
          remarksId: "5a8bf7e3903cc83237ebd013"
        }
         ]
}

在我的结果中,我丢失了除 remarks 之外的所有其他字段。我也想要结果以及其他字段。我尝试了$project 操作,但仍然没有用。

预期结果:

    {
  _id: "5a8bf7e3903cc83237ebd014",
  prospect_name: "Akruthi",
  phone: "9878979879",
  email: "",
  address: "Kundapur",
  landmark: "Grt",
  city: "Udupi",
  state: "5a869c795eb34ecae3ab1ef6",
  region: "5a8689725eb34ecae3ab1ede",
  methodology: 2,
  sub_category: "colour",
  created_by: "asdadasad",
  referred_by: "Self",
  remarks: [
          {
          data: "test 3",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:54:01.018Z",
          remarksId: "5a8cfb69ea4e7c14c1f7c550"
        },
        {
          data: "test 2",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:41:45.514Z",
          remarksId: "5a8cf889160046121e3f1b25"
        },
        {
          data: "test 1",
          user: "5a858129e6e8f6724d6aa551",
          created_at: "2018-02-21T04:35:30.615Z",
          remarksId: "5a8cf7122ad6f00da98a3f05"
        },
        {
          data: "Good",
          user: "5a8c0642903cc83237ebd01f",
          created_at: "2018-02-20T10:26:43.686Z",
          remarksId: "5a8bf7e3903cc83237ebd013"
        }
         ],
  created_at: "2018-02-20T10:26:43.686Z"
}

【问题讨论】:

  • 尝试 $$root 获取所有字段。
  • 你能举个例子$root
  • 我更新了评论。请检查
  • 是的,请给我$$root 的查询示例。我之前从未尝试过$$root

标签: node.js mongodb


【解决方案1】:

添加
{ $项目:{ 前景名称:1, 电话:1, 电子邮件:1, 地址1, 地标:1, 城市:1, 状态:1, 地区:1, 方法:1, 子类别:1, created_by: 1, 推荐人:1 } } 并用以下行通过查询替换您的组 { $group: { _id: null, 备注: { $push: '$remarks' } } }

【讨论】: