Рассчитать сумму поля внутри встроенного документа - PullRequest
0 голосов
/ 18 октября 2018

У меня есть таблица общежития, например

       {
         _id: ...,
         Name: ....,
         SchoolId: ...,
         AllotmentsDetails: [
         ...,
         ...,
         ],
         RoomsDetails:
         [
            {
             NumberOfBeds: 4
             ....
            },
            {
             NumberOfBeds: 5
             ....
            }
         ]
         }

Я хочу рассчитать общее количество мощностей в общежитии.В приведенном выше примере должно быть 9 (сумма всех полей NumberOfBeds во встроенном документе RoomsDetails).Я пробовал ниже строки кода.

   $query = array('SchoolId' => new MongoDB\BSON\ObjectID($this->SchoolId));

      // Actual Aggregation
     $pipeline = array(
        array(
            '$match' => $query
        ),
        [ '$addFields'=> [
          'AllotmentsDetails'=> [
             '$cond'=> [
               'if'=> [
                       '$ne'=> [ [ '$type'=> '$AllotmentsDetails' ], 'array' ]
                      ],
                     'then'=> [],
                     'else'=> '$AllotmentsDetails'
                     ]
                 ]
           ]],
     [
      '$addFields' => [
          'NonExpiredAllotments' => [
             '$map' => [
                'input' => '$AllotmentsDetails',
                'as' => 'item',
                'in' => [
                    '$cond' => [
                        ['$gt' => ['$$item.ToDate', new MongoDB\BSON\UTCDateTime((new DateTime())->getTimestamp() * 1000)]],
                        '$$item.AllotmentId',
                        false
                    ]
                  ]
                ]
              ]
            ]
          ],
        [
         '$addFields' => [
          'TotalNumberOfCapacities' => [

                    ['$sum' => [ 'RoomsDetails.NumberOfBeds']]

                    ]
             ]
           ]
        );

          $cursor = $this->collection->aggregate($pipeline)

Вывод

      array(1) { [0]=> object(MongoDB\Model\BSONDocument)#37 (1) { ["storage":"ArrayObject":private]=> array(12) { ["_id"]=> object(MongoDB\BSON\ObjectId)#13 (1) { ["oid"]=> string(24) "5bc087ddd2ccda0eb4004711" } ["Name"]=> string(3) "rrr" ..............
  } ["TotalNumberOfCapacities"]=> object(MongoDB\Model\BSONArray)#36 (1) { ["storage":"ArrayObject":private]=> array(1) { [0]=> int(0) } } } } }

Он не рассчитывается должным образом Пожалуйста, помогите !!!

Вот актуальный встроенный документ

           "RoomsDetails": [
            {
  "RoomId": "9f9b510c-9753-f410-8f79-f0b04affb7a2",
  "FloorNumber": "1",
  "RoomNumber": "101",
  "RoomType": ObjectId("5b0ceee0bb2c561448001cc5"),
  "NumberOfBeds": "4",
  "Available": NumberInt(3),
  "BayId": ObjectId("5bc087dcd2ccda0eb400470f")
},
 {
  "RoomId": "789b510c-9753-f410-8f79-f0b04affb768",
  "FloorNumber": "1",
  "RoomNumber": "102",
  "RoomType": ObjectId("5b0ceee0bb2c561448001cc5"),
  "NumberOfBeds": "5",
  "Available": NumberInt(3),
  "BayId": ObjectId("5bc087dcd2ccda0eb400470f")
}

],

...