Mongoose 对对象的子数组进行排序

时间:2021-07-26 05:05:27

标签: mongoose mongodb-query

我在对具有多个对象数组的子元素进行排序时遇到问题。

例如

集合:对话

[
{
  "key" : "value",
  "receivers" : [
    { "userId" : 1, "updatedAt" : new Date() },
    { "userId" : 2, "updatedAt" : new Date() }

  ]
},
{
  "key" : "value",
  "receivers" : [
    { "userId" : 1, "updatedAt" : new Date() },
    { "userId" : 2, "updatedAt" : new Date() }

  ]
}
]

现在我根据receivers.userId查找结果

conversation.find( { 'receivers.userId' : 1 } ).sort({ 'receivers.updatedAt' : -1 })

这里我面临的问题是排序。我只需要对来自子数组的 userId = 1 的记录进行排序。目前,如果 userId: 2 有最新的更新日期,那么它首先出现..因为我需要考虑 userId:1 的更新日期

1 个答案:

答案 0 :(得分:0)

通过使用聚合,我们可以实现这一点。

db.getCollection('conversations').aggregate([
    {
      $addFields: {
        lastSent: {
          $let: {
            vars: {
              filtered: {
                $filter: {
                  input: "$receivers",
                  cond: { $eq: ["$$this.userId", 1177947885] }
                }
              }
            },
            in: { $max: "$$filtered.updatedAt" }
          }
        }
      }
    },
    { $sort: { lastSent: -1 } },
    { $project: { lastSent: 0 } }
  ])

相关问题