【问题标题】:sort documents by their children in mongoose按他们的孩子在猫鼬中排序文件
【发布时间】:2021-08-03 08:59:01
【问题描述】:

我有一个mongodb集合如下:

[
  {
    "_id": { "$oid": "609b8f06a28f6728d19b486d" },
    "user1": "609952c2b112741634d27d89",
    "user2": "609b8202b5a389099cae3ce6",
    "messages": [
      {
        "body": "Hello user 2",
        "user": "609952c2b112741634d27d89",
        "readed": true,
        "created": { "$date": "2021-05-13T01:38:07.502Z" }
      },
      {
        "body": "How old are you?",
        "user": "609952c2b112741634d27d89",
        "readed": false,
        "created": "2021-05-13T01:40:07.502Z"
      },
      {
        "body": "I am fine. Are you ready?",
        "user": "609b8202b5a389099cae3ce6",
        "readed": false,
        "created": "2021-05-13T01:42:07.502Z"
      },
      {
        "body": "Yes. Lighgui start",
        "user": "609952c2b112741634d27d89",
        "readed": false,
        "created": "2021-05-13T01:38:50.502Z"
      }
    ]
  }
]

我想先对有messages 的聊天进行排序,我该怎么做?

如果可能的话,我想获取每个聊天的最新消息以及readed=false 的消息数量

【问题讨论】:

  • 这个答案对你有帮助吗?

标签: javascript node.js mongodb mongoose mongodb-query


【解决方案1】:

你可以使用

  • $unwind 解构数组
  • $sort 根据创建的消息对数组进行排序
  • $group 重构数组

这里是代码

db.collection.aggregate([
  {
    $unwind: {
      path: "$messages",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    "$sort": {"messages.created": 1 }
  },
  {
    "$group": {
      "_id": "$_id",
      user1: { $first: "$user1" },
      user2: { $first: "$user2" },
      "messages": { "$push": "$messages" }
    }
  }
])

工作Mongo playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2016-08-17
    • 2016-11-18
    • 2023-04-08
    • 2020-11-21
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多