laravel mongodb模型要怎么写分组聚合?
1. 运行环境
1). 当前使用的 Laravel 版本?
laravel5.5
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.4
php-fpm 版本:7.4
3). 当前系统
Ubuntu
4). 业务环境
开发环境
5). 相关软件版本
jenssegers/mongodb
2. 问题描述?
mysql这样写可以拿到canteen_name和count,但mongodb模型好像不支持,在Issues上搜索问题的回答都是通过写原生解决的,想问下有没有更好的办法
$total = OrderModel::query()
->selectRaw('count(user_id)')
->where('pay_status', '1')
->where('date', $orderDate)
->whereIn('canteen_id', Arr::intToString($canteenIds))
->groupBy([
'canteen_name',
])
->orderBy('_id')
->get();
3. 您期望得到的结果?
order.aggregate([{
"$match": {
"pay_status": "1",
"date": "2023-06-08",
"canteen_id": {
"$in": ["16"]
}
}
}, {
"$group": {
"_id": "$canteen_name",
"count": {
"$sum": 1
}
}
}, {
"$sort": {
"_id": 1
}
}])
4. 您实际得到的结果?
下面是通过打印得出的执行语句
order.aggregate([{
"$match": {
"$and": [{
"pay_status": "1"
}, {
"date": "2023-06-07"
}, {
"canteen_id": {
"$in": ["16"]
}
}]
}
}, {
"$group": {
"_id": {
"canteen_name": "$canteen_name"
},
"canteen_name": {
"$last": "$canteen_name"
},
"count(user_id)": {
"$last": "$count(user_id)"
}
}
}, {
"$sort": {
"_id": 1
}
}], {
"typeMap": {
"root": "array",
"document": "array"
}
})
推荐文章: