node.js – MongoDB:尝试使用aggregate $unwind来获取嵌入文档

我有一个MongoDB集合[Users],每个集合都有一个嵌入文档数组[照片].
我希望能够有一个页面列出最近的照片,例如 – 任何用户上传的最近10张照片.

用户

[
    {
        _id: ObjectID
        name: "Matthew"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo1.jpg"
                created: Date("2013-02-01")
            },{
                _id: ObjectID
                url: "http://www.example.com/photo3.jpg"
                created: Date("2013-02-03")
            }
        ]
    },{
        _id: ObjectID
        name: "Bob"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo2.jpg"
                created: Date("2013-02-02")
            },{
                _id: ObjectID
                url: "http://www.example.com/photo4.jpg"
                created: Date("2013-02-04")
            }
        ]
    }
]

我解决此问题的第一个尝试是找到所有照片不为空的用户,并按创建日期对其进行排序:

User.find({images:{$ne:[]}}).sort({"images.created":-1})

不幸的是,这不起作用,因为我需要它.它按最新图像对用户进行排序,但仍返回所有图像,并且无法限制该功能返回的图像数量.

我开始研究聚合,看起来它可能是我正在寻找的解决方案,但我很难找到如何让它工作.

理想情况下,我想要返回的结果类型如下:

results: [
    {
        _id: ObjectID (from Photo)
        name: "Bob"
        url: "http://www.example.com/photo4.jpg"
        created: Date("2013-02-04")
    }
    {
        _id: ObjectID (from Photo)
        name: "Matthew"
        url: "http://www.example.com/photo3.jpg"
        created: Date("2013-02-03")
    }
]

每个结果应该是一张照片,我应该能够将结果限制为特定的数量,并跳过分页查看的结果.

如果您需要更多信息,请与我们联系,并感谢您的回复.

解决方法

您需要聚合框架:

db.users.aggregate(
  { $project: {"Photos" : 1,_id: 0,name:1 }},{ $unwind: "$Photos" },{ $sort: {"Photos.created" : -1} },{ $skip: 1 },{ $limit: 2 }
)

结果将是这样的:

{
    "result" : [ 
        {
            "name" : "Matthew","Photos" : {
                "_id" : 2,"url" : "http://www.example.com/photo3.jpg","created" : "2013-02-03"
            }
        },{
            "name" : "Bob","Photos" : {
                "_id" : 3,"url" : "http://www.example.com/photo2.jpg","created" : "2013-02-02"
            }
        }
    ],"ok" : 1
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于nodejs...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs怎么实现目录不存在自动创建”文章能帮助大...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何实现定时删除文件”文章能帮助大家解决疑惑...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
本篇内容主要讲解“怎么安装Node.js的旧版本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎...
这篇“node中的Express框架怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家...
这篇文章主要介绍“nodejs如何实现搜索引擎”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现搜索引擎...
这篇文章主要介绍“nodejs中间层如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中间层如何设置”文...
这篇文章主要介绍“nodejs多线程怎么实现”,在日常操作中,相信很多人在nodejs多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
这篇文章主要讲解了“nodejs怎么分布式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么分布式”...
本篇内容介绍了“nodejs字符串怎么转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
这篇文章主要介绍了nodejs如何运行在php服务器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs如何运行在php服务器文章都...
本篇内容主要讲解“nodejs单线程如何处理事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs单线程如何...
这篇文章主要介绍“nodejs怎么安装ws模块”,在日常操作中,相信很多人在nodejs怎么安装ws模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
本篇内容介绍了“怎么打包nodejs代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!
本文小编为大家详细介绍“nodejs接收到的汉字乱码怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs接收到的汉字乱码怎么解决”文章能帮助大家解...
这篇“nodejs怎么同步删除文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇...
今天小编给大家分享一下nodejs怎么设置淘宝镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希