Mongoose:获取一个对象中多个子文档的内容

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


这就是我的意思:


我的收藏 :



    {

        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 件物品。我尝试按照猫鼬文档中的一些示例使用聚合方法,但我没有成功使其工作。我也一直在考虑创建一个仅包含用户项目的新数据库,以便我可以轻松地对它们进行排序,但我觉得有更好的解决方案可以做到这一点。


所以我的问题是你知道我怎样才能让它发挥作用吗?先感谢您


慕尼黑8549860
浏览 109回答 1
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)或检查驱动程序的语法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript