Как получить размер массива в документе, используя MongoDB Laravel Query - PullRequest
0 голосов
/ 09 апреля 2020

у меня есть данные

    {
  "_id": {
    "$oid": "5e8e1be5a78b4479443eae43"
  },
  "vehicle_component_id": 3,
  "damages_types": [
    1,
    7
  ],
  "mileages": [
    "0",
    "0",
    "0",
    "0",
    "0",
    "0",
    "0",
    "0",
    "0",
    "0"
  ],
  "damages": {
    "1": {
      "upper_bound": [
        null
      ],
      "damages": [
        "0"
      ],
      "lower_bound": [
        null
      ]
    },
    "7": {
      "upper_bound": [
        null
      ],
      "damages": [
        "0"
      ],
      "lower_bound": [
        null
      ]
    }
  },
  "created_at": "2020-04-08 20:45:57",
  "updated_at": "2020-04-08 20:45:57"
}

и при попытке получить размер или длину массива mileages запрос mon go равен

db.vehicle_component_damages_values.aggregate(
{ $match: { vehicle_component_id: 3}  },
{$project: { count: { $size:"$mileages" }}}
)

, и он возвращает 10, как и ожидалось но при попытке с jenssegers / laravel -mongodb вроде

            $query = DB::connection($this->mongoCon)->collection($this->table)->raw(function($collection) use ($vehicleComponentId) {

            return $collection->aggregate([
                ['$match' => ['vehicle_component_id' => $vehicleComponentId]],
                [
                    '$project' => [
                        'count' => [
                            '$size' => '$mileages'
                        ]
                    ]
                ],
            ]);
        });

возвращается

MongoDB\Driver\Cursor {#550}

1 Ответ

0 голосов
/ 09 апреля 2020

так что мой окончательный код для этого

public function findMileagesSizeByVehicleComponentId($vehicleComponentId)
{
    try {

        $cursor = DB::connection($this->mongoCon)->collection($this->table)->raw(function ($collection) use (
            $vehicleComponentId
        ) {

            return $collection->aggregate([
                ['$match' => ['vehicle_component_id' => $vehicleComponentId]],
                [
                    '$project' => [
                        'count' => [
                            '$size' => '$mileages',
                        ],
                    ],
                ],
            ]);
        });

        $result = $cursor->toArray();

        if (!empty($result)) {
            if (sizeof($result) == 1) {
                return iterator_to_array($result[0])['count'];
            } else {
                throw new ValidationError("Result has multiple counts please check your query.");
            }
        } else {
            return 0;
        }


    } catch (\Throwable $e) {
        return Error::handel($e);
    } catch (\Exception $e) {
        return Error::handel($e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...