Javascript 在mongoose中按孩子对文档进行排序

Javascript 在mongoose中按孩子对文档进行排序,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我有一个mongodb系列,如下所示: [ { “_id”:{“$oid”:“609b8f06a28f6728d19b486d”}, “用户1”:“609952c2b112741634d27d89”, “用户2”:“609b8202b5a389099cae3ce6”, “信息”:[ { “正文”:“你好用户2”, “用户”:“609952c2b112741634d27d89”, “readed”:没错, “已创建”:{“$date”:“2021-05-13T01:38:07.502Z”} },

我有一个mongodb系列,如下所示:

[
{
“_id”:{“$oid”:“609b8f06a28f6728d19b486d”},
“用户1”:“609952c2b112741634d27d89”,
“用户2”:“609b8202b5a389099cae3ce6”,
“信息”:[
{
“正文”:“你好用户2”,
“用户”:“609952c2b112741634d27d89”,
“readed”:没错,
“已创建”:{“$date”:“2021-05-13T01:38:07.502Z”}
},
{
“身体”:“你多大了?”,
“用户”:“609952c2b112741634d27d89”,
“readed”:错误,
“已创建”:“2021-05-13T01:40:07.502Z”
},
{
“身体”:“我很好,你准备好了吗?”,
“用户”:“609b8202b5a389099cae3ce6”,
“readed”:错误,
“已创建”:“2021-05-13T01:42:07.502Z”
},
{
“正文”:“是的,LIGHGUISTART”,
“用户”:“609952c2b112741634d27d89”,
“readed”:错误,
“已创建”:“2021-05-13T01:38:50.502Z”
}
]
}
]
我想先对包含
消息的聊天进行排序我该怎么做

如果可能的话,我想获得每次聊天的最新消息以及
readed=false

您可以使用的消息数

  • $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" }
    }
  }
])

工作

答案对你有帮助吗?