Yii2 mongodb分组查询

php 复制代码
        $data = MongoDbModelName::getCollection()->aggregate([
            [
                '$group' => [
                    '_id' => '$user_id', //通过user_id分组去重
                    'total' => [
                        '$sum' => 1
                    ]
                ],
            ],
            [
                '$match' => [
                    'total' => [
                        '$gt' => 1
                    ]
                ]
            ]
        ],['allowDiskUse' => true]);

相当于

sql 复制代码
select user_id,count(1) as total from MongoDbCollection group by user_id having count(1) > 1

aggregate的第二个参数['allowDiskUse' => true],是表示允许使用内存,比如数据量大的时候,可以加上这个;如果数据量小的话,这个参数可以直接去掉。 如果需要按两个字段进行分组的话,可以将 $group 的_id指定为数组,如下:

php 复制代码
$data = MongoDbModelName::getCollection()->aggregate([
            [
                '$group' => [
                    '_id' => ["aid":"$aid","user_id":"$user_id"],  //通过aid和user_id分组
                    'total' => [
                        '$sum' => 1
                    ]
                ],
            ],
            [
                '$match' => [
                    'total' => [
                        '$gt' => 1
                    ]
                ]
            ]
        ],['allowDiskUse' => true]);

相当于

sql 复制代码
select aid,user_id,count(1) as total from MongoDbCollection group by aid,user_id having count(1) > 1

如果要限制输出条数。可以在aggregate的第一个参数数组尾部中增加["$limit" => 1],必须是尾部,因为aggregate的会使用第一个参数的元素进行过滤,第一个元素过滤后的结果会给第二个元素,依次内推;实例如下

php 复制代码
$data = MongoDbModelName::getCollection()->aggregate([
            [
                '$group' => [
                    '_id' => ["aid":"$aid","user_id":"$user_id"],  //通过aid和user_id分组
                    'total' => [
                        '$sum' => 1
                    ]
                ],
            ],
            [
                '$match' => [
                    'total' => [
                        '$gt' => 1
                    ]
                ]
            ],
            [
            	'$limite' => 15
            ]
        ],['allowDiskUse' => true]);
相关推荐
月空MoonSky20 分钟前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa21 分钟前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮1 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长1 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师2 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3172 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee3 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
gorgor在码农3 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql
bug菌¹3 小时前
滚雪球学Oracle[6.2讲]:Data Guard与灾难恢复
数据库·oracle·data·灾难恢复·guard
一般路过糸.4 小时前
MySQL数据库——索引
数据库·mysql