这是我的猫鼬收集数据:
{
"ShopId" : "439",
"productName" : "veg",
"productCategory" : "meals",
"mrp" : "38 "
},
{
"ShopId" : "439",
"productName" : "non-veg",
"productCategory" : "meals",
"mrp" : "380 "
},{....}
查询
db.getCollection('ProductDetails').aggregate(
[{ "$match": { "ShopId": "439" } },{"$group": {"_id": "$productCategory", "count": { "$sum": 1 },
"products": {"$push":{"productname": "$productName"}}}},
{"$group": {"_id": null, "productList": {"$push": {"categoryname": "$_id", "productcount": "$count",
"products": "$products"}}}},{$project:{products:{$slice:["$productList.products",2]}}}])
输出:
{
"_id" : null,
"productList" : [
{
"categoryname" : "meals",
"productcount" : 8.0,
"products" : [
{
"productname" : "non veg"
},
{
"productname" : "veg"
},
{
"productname" : "c"
},
{
"productname" : "d"
},
{
"productname" : "df"
},
{
"productname" : "dfr"
},
{
"productname" : "qe"
},
{
"productname" : "as"
}
]
}
]
}
预期输出:
我想将产品数量限制为2.但不是所有产品都在显示。
{
"_id" : null,
"productList" : [
{
"categoryname" : "meals",
"productcount" : 8.0,
"products" : [
{
"productname" : "non veg"
},
{
"productname" : "veg"
}
]
}
]
}
答案 0 :(得分:1)
将$project
阶段替换为以下内容。
{$project:{products:{$slice:[{$arrayElemAt:["$productList.products", 0]},2]}}}
您的产品是阵列数组。
"products": [
[{
"productname": "veg"
}, {
"productname": "non-veg"
}]
]
带有$arrayElemAt
的 0
会选择内部数组,您可以使用$slice
来限制产品。
答案 1 :(得分:0)
我相信您使用$slice
函数错误:正如我在本文中提到的那样:
slice函数有两个参数:第一个是初始索引,第二个是此索引后的元素数。这是一个例子:
db.collection.find({},{_ id:0,products:{$ slice:[0,2]})
这将从数组的索引[0]中获取两个元素。希望我的回答很有帮助。