【问题标题】:Mongoose : get content of multiple subdocument in one objectMongoose:在一个对象中获取多个子文档的内容
【发布时间】:2020-11-08 08:36:39
【问题描述】:

您好,我一直在尝试选择单个 对象中返回的多个文档的所有子文档,以及是否可以按值排序。

这就是我的意思:

我的收藏:


    {
        userId: 1,
        ...
        items : [
            {name: "candle", value:5},
            {name: "shoes", value: 200}
        ]
    },
    {
        userId: 2,
        ...
        items : [
            {name: "burger", value:17},
            {name: "car", value: 5000}
        ]
    },
    {
        userId: 3,
        ...
        items : [
           {name: "chips", value:2},
        ]
    }

我想做一个查询,返回类似的东西:

    [
    {userId:1, name: "candle", value:5},
    {userId:1, name: "shoes", value: 200},
    {userId:2, name: "burger", value:17},
    {userId:2, name: "car", value: 5000},
    {userId:3, name: "chips", value:2}
    ]

我一直在尝试这个:

Mymodel.find({}).select("items"); //It return me all the items but in separate object. [ {items: []} ...]

如果可能的话,我想对它们进行排序:我想获得用户收藏中最有价值的 3 个项目。我尝试按照猫鼬文档中的一些示例使用 aggregate 方法,但我没有成功使其工作。我也一直在考虑创建一个只包含用户项目的新数据库,以便我可以轻松地对它们进行排序,但我觉得有更好的解决方案来做到这一点。

所以我的问题是你知道我怎样才能让它工作吗? 提前谢谢你

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query


    【解决方案1】:

    我只是粘贴一个选项

    var pipeline = [
        {
            "$unwind" : "$items"
        },
        {
            "$addFields" : {
                "name" : "$items.name",
                "value" : "$items.value"
            }
        },
        {
            "$unset" : "items"
        },
        {
            "$project" : {
                "_id" : 0,
                "name" : 1,
                "value" : 1,
                "userId" : 1
            }
        }
    ]
    
    

    运行db.collname.aggregate(pipeline) 或查看驱动程序的语法。

    【讨论】:

    • 嘿,对不起,我放了'...',因为我想表明该文档不仅仅包含 userId 和“items”对象。抱歉,如果不清楚。非常感谢您的回答,我会尝试看看如何使用它!
    • 好的,我刚刚做到了,而且效果很好。非常感谢。我将尝试了解它现在是如何工作的。我还通过这样做成功地按值对项目进行了排序:userModel.aggregate(pipeline).sort({value: -1}).limit(3)。再次感谢您在尝试了几个小时后给了我很多帮助。有一个美好的白天/夜晚/生活
    • @user14596929 我会在我的个人资料中添加电子邮件,如果您有具体问题可以问我(不是为了解决大问题)。有一个好的u2
    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2020-04-20
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多