13 January, 2016
laravel-mongodb – complex query example
Complex queries can be pretty hard to translate. I tried to convert a PostgreSQL query for grouping by a boolean and a date at the same time. Here is my original Eloquent query:
ModelName::selectRaw('COUNT(*) AS "count", boolean_one, date_trunc(\'day\', created_at) as date') ->where('created_at', '>=', Carbon::now()->subMonth()) ->where('boolean_two', '=', $booleanTwo) ->where('string_value', 'LIKE', $searchForString . '%') ->groupBy('boolean_one')->groupBy('date') ->orderBy('date')->get();
And here’s the same query translated, using Moloquent:
ModelName::raw(function ($collection) { return $collection->aggregate([ [ '$match' => [ 'created_at' => ['$gt' => new MongoDate(Carbon::now()->subMonths(1)->timestamp)], 'boolean_two' => $booleanTwo, 'string_value' => ['$regex' => new MongoRegex('/.*' . $searchForString . '.*/')] ], ], [ '$group' => [ '_id' => [ 'month' => ['$month' => '$created_at'], 'day' => ['$dayOfMonth' => '$created_at'], 'year' => ['$year' => '$created_at'], 'boolean_one' => '$boolean_one' ], 'count' => [ '$sum' => 1 ] ] ] ]); });;