数组中的切片不起作用?

时间:2017-02-23 13:11:11

标签: node.js mongodb mongoose mongodb-query

这是我的猫鼬收集数据:

      {
           "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"
                } 
               ]
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

$project阶段替换为以下内容。

{$project:{products:{$slice:[{$arrayElemAt:["$productList.products", 0]},2]}}}

您的产品是阵列数组。

"products": [
  [{
    "productname": "veg"
  }, {
    "productname": "non-veg"
  }]
]
带有$arrayElemAt

0会选择内部数组,您可以使用$slice来限制产品。

答案 1 :(得分:0)

我相信您使用$slice函数错误:正如我在本文中提到的那样:

Find a value in array

slice函数有两个参数:第一个是初始索引,第二个是此索引后的元素数。这是一个例子:

db.collection.find({},{_ id:0,products:{$ slice:[0,2]})

这将从数组的索引[0]中获取两个元素。希望我的回答很有帮助。