计算数组mongo PHP中的值数量

时间:2019-02-28 10:47:06

标签: php database mongodb mongodb-query aggregation-framework

我需要获取products数组中存在的数组元素的总数。 到目前为止,我已经尝试使用$size=>$products方法,但是由于从技术上讲有两个数组,所以我得到的值只有2,但是我也想对内部元素进行计数,以便得出期望的结果是3

我知道我需要使用$unwind,但是我不知道这种方法。

{  
   _id:2,
   card_pay:3998,
   count:4598,
   orders:2,
   products:[  
      [  
         {  
            product_id:{  
               $oid:"5c63d418ae1db123d8048276"
            },
            amount:2499,
            quantity:1,
            status:1
         },
         {  
            product_id:{  
               $oid:"5c46f7f329067970211471a0"
            },
            amount:200,
            quantity:2,
            status:1
         }
      ],
      [  
         {  
            product_id:{  
               $oid:"5c63d3afae1db123d8048273"
            },
            amount:1499,
            quantity:1,
            status:1
         }
      ]
   ]
}

编辑1: ['$project'=>[ 'number_of_products'=> ['$size'=> '$products']

到目前为止,我已经尝试过了。

编辑2:

到目前为止,我已经尝试过了。

[
	'$project'=>[
      'posts'=> [
         '$map'=> [
         'input'=> '$products',
         'as'=> 'products_inner',
         'in'=> [
               'Count'=>[
			   '$size'=> '$$products_inner'
         ]
   ]
 ],
						],

我正在得到输出

[
  {
    _id: 2,
    posts: [
      {
        Count: 2
      },
      {
        Count: 1
      }
    ]
  }
]

现在我需要做的就是计算数值以得到3作为答案

1 个答案:

答案 0 :(得分:1)

您非常接近$ map的解决方案。这是您必须做的:(随意将此控制台查询翻译成您的语言实现):

 db.collection.aggregate([
      {
        $project: {
          totalPosts: {
            $sum: {
              $map: {
                input: "$products",
                as: "products_inner",
                in: {
                  $size: "$$products_inner"
                }
              }
            },

          }
        }
      },
    ]) 

将导致:

[
  {
    "_id": 2,
    "totalPosts": 3
  }
]