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

发布时间:2020-09-30 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了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
}

总结

以上是编程之家为你收集整理的node.js – MongoDB:尝试使用aggregate $unwind来获取嵌入文档全部内容,希望文章能够帮你解决node.js – MongoDB:尝试使用aggregate $unwind来获取嵌入文档所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!