首页 > 解决方案 > 猫鼬排序子文档并返回子文档

问题描述

persons收藏:

{ 
    name: "jhon",
    msgs: {
        chat_one: [
            {id: 1234, msg: "hi", date: "18/05/2018"},
            {id: 1234, msg: "hello", date: "19/05/2018"}
        ],
        chat_two: [
            {id: 1234, msg: "hi", date: "18/05/2018"},
            {id: 1234, msg: "hello", date: "19/05/2018"}
        ]
    }
}

如何使用 mongoose 进行查询并获取如下数据。

{
  chat_one: [
    {id: 1234, msg: "hello", date: "19/05/2018"},
    {id: 1234, msg: "hi", date: "18/05/2018"}
  ]
}

标签: node.jsmongodbmongoose

解决方案


一种方法是通过这样的聚合:

db.collection.aggregate([
  { $match: { name: "jhon" }},
  { $unwind: "$msgs" },
  { $sort: { "msgs.date": -1 }},
  { $group: { _id: "$name", msgs: { $addToSet: "$msgs" }}},
  { $project: { _id: 0 }}
])

你可以看到它在这里工作

我们的想法是$match先输入名称,然后再$unwind输入$sort日期,然后再$group获得$project所需的输出。


推荐阅读