在每个

时间:2017-10-14 10:46:08

标签: arrays mongodb mongodb-query projection

我被困在某事上需要你的帮助。 我想对下面的集合执行一个mongo聚合查询,这样我就可以从boxWeight1和boxWeight2得到每个子阵列表的最大总重量,即sum+=max[boxWeight1,boxWeight2] for each array item in boxList array和其他字段应该按原样投影但是使用不同的密钥名称。

收藏有点像这样......

{
     _id: '',
     email: 'yugal121@gmail.com',
     number: 12345,
     boxDetail: {
        boxname: 'package_yugal',
        boxList: [
            {
               boxWeight1: '4.0',    //this is max here. so it will be added
               boxWeight2: '2.0'
            }.
            {
               boxWeight1: '4.0',
               boxWeight2: '8.0'     //this is max here. so it will be added
            } 
            {
               boxWeight1: '0.0',
               boxWeight2: '2.0'     //this is max here. so it will be added
            }
        ]
    } 
}

因此,执行查询后上述集合的结果应该是这样的:

{
    'User Mail': 'yugal121@gmail.com',
    'Order Number': '12345',
    'Total Weight': '14.0'   // 4 + 8 + 2 
}

我希望你理解我的问题。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下查询:

db.collection.aggregate([
           {
              $unwind : "$boxList"
           },
           {
              $project : {
                           "email" : 1,
                           "number" : 1,
                           "maxWeight" : { $cond : { if : { $gt : 
                               ["$boxList.boxWeight1","$boxList.boxWeight2"]} , 
                                                    then : "$boxList.boxWeight1" , 
                                                    else : "$boxList.boxWeight2"}
                                         }
                         }
            },
            {
                $group : { 
                            _id : "$_id" , 
                            Total : {  $sum : "$maxWeight" }, 
                            email : {  $first : "$email" },
                            number : {$first : "$number"}
                        }
           },
           {
               $project : { 
                            "User Mail" : "$email" , 
                            "Order Number" : "$number",
                            "Total Weight" : "$Total",
                            _id : 0
                          }
            }
  ]);

答案 1 :(得分:0)

这很有用......

 <form method="post" action='<?php echo htmlentities($_SERVER["PHP_SELF"]);?>'>

这会给出带有_id列的结果。可以在其后使用另一个投影删除。