您好,我一直在尝试选择在一个单个对象中返回的多个文档的所有子文档,以及是否可以按值排序。这就是我的意思:我的收藏 : { 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 件物品。我尝试按照猫鼬文档中的一些示例使用聚合方法,但我没有成功使其工作。我也一直在考虑创建一个仅包含用户项目的新数据库,以便我可以轻松地对它们进行排序,但我觉得有更好的解决方案可以做到这一点。所以我的问题是你知道我怎样才能让它发挥作用吗?先感谢您
1 回答
米脂
TA贡献1836条经验 获得超3个赞
我只是粘贴一个选项
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)或检查驱动程序的语法。
添加回答
举报
0/150
提交
取消