当前位置:  开发笔记 > 编程语言 > 正文

仅在mongodb聚合中返回带有最新子文档的文档

如何解决《仅在mongodb聚合中返回带有最新子文档的文档》经验,为你挑选了1个好方法。

我有这些猫鼬模式:

var Thread = new Schema({
    title: String, messages: [Message]
});
var Message = new Schema({
    date_added: Date, author: String, text: String
});

如何使用最新的Message子文档(限制1)返回所有线程?

目前,我正在Thread.find()服务器端过滤结果,但我想在aggregate()性能问题上使用MongoDb中的此操作.



1> JohnnyHK..:

您可以使用$unwind,$sort$group使用以下内容执行此操作:

Thread.aggregate([
    // Duplicate the docs, one per messages element.
    {$unwind: '$messages'}, 
    // Sort the pipeline to bring the most recent message to the front
    {$sort: {'messages.date_added': -1}}, 
    // Group by _id+title, taking the first (most recent) message per group
    {$group: {
        _id: { _id: '$_id', title: '$title' }, 
        message: {$first: '$messages'}
    }},
    // Reshape the document back into the original style
    {$project: {_id: '$_id._id', title: '$_id.title', message: 1}}
]);

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有