关于mongodb的 数组分组 array group

mongodb支持array类型

在group的功能方面,mongodb确实不错。对于复杂的数据处理用mapreduce,但是这个玩意很慢,比较适合脚本处理数据,不适合实时数据查询

在实时数据处理方面得用管道,关于管道语法方面,参看:

http://blog.csdn.net/terry_water/article/details/43529367

如果$class_artist是数组,需要对数组里面的数据进行group,那么可以使用$unwind

,它的功能就是把数组拆分出来,形成多条数据。

db.articles.aggregate([
  {$match: { class_date: { $gte: date } } },
  {$project: { _id: 0, class_artist: 1 } },
  {$unwind: "$class_artist" },
  {$group: { _id: "$class_artist", tags: { $sum: 1 } }},
  {$project: { _id: 0,class_artist: "$_id", tags: 1 } },
  {$sort: { tags: -1 } }
])

在yii2框架中:

可以在Query.php中加入一个函数:

对 $filter_size数组拆分,然后group。

public function filterSize($db = null){

		$collection = $this->getCollection($db);
        $pipelines = [];
        if ($this->where !== null) {
            $pipelines[] = ['?match' => $collection->buildCondition($this->where)];
        }

		$pipelines[] = ['?unwind'=>"\$filter_size"];

        $pipelines[] = [
            '$group' => [
                '_id' => "\$filter_size",
                'num_total' => [
                    '?sum'=> 1,
                ],
            ]
        ];
	$pipelines[] = ['?sort'=> ['_id'=> 1] ];

        $result = $collection->aggregate($pipelines);
		return $result;

	}
时间: 2024-08-03 06:17:51

关于mongodb的 数组分组 array group的相关文章

mongodb mapredReduce 多个条件分组(group by)

现在又一张 表它的数据格式如下: { "_id" : ObjectId("53b224e0a1ae72328a57702c"), "title" : "SECJ0118E", "criteria" : "未找到对应的错误码", "actual" : "1", "effect" : "可能引起重大问题", &q

MongoDB的分组统计 group

mongodb中的分组聚合用$group,它是不能进行sort的,使用格式如下: { $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } } 其中_id属性是必须要有的,目的是用来指定分组的字段或依据,field1为自定义字段,accumulator为累加器,下面以统计每天用户注册数为列 db.user.aggregate([ { $group:{

mongodb 更新数组出现can&#39;t append to array using string field name

数据库内容大概如下: { _id:1, "hero_list" : { "15521" : { "stars" : 0, "_id" : 15521, "equip" : [ [ ], [ ], [ ], { "item_id" : 310141, "lv" : 103, "uuid" : "4a727ee1-e7b0-4265-b004

数组分组

按甲方,乙方分组 原数组: array(4) { [0] => array(6) { ["party_name"] => string(6) "甲方" ["party_entity_type"] => string(1) "2" ["party_entity_id"] => string(32) "cc4a18cd4a1b366c4225abd1e5d07c5a"

PHP 按照多个键值给数组分组合并

简介: $array 为一堆数组,各数组键值为固定 $keys为分组依据,在$array中按照$keys所指定的键值将数组分组,并且将除$keys指定键值对应的值以外的值合并 1 function groupBy($array,$keys){ 2 $i = 0; 3 while($i < sizeof($array)){ 4 $x = sizeof($array) - 1; 5 while ($x > $i) { 6 //取数组交集并返回交集,保留键名 7 $temp = array_inte

OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别

OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间使用.OpenGL3.0已经废弃此方法.每个glVertex与GPU进行一次通信,十分低效. glBegin(GL_TRIANGLES); glVertex(0, 0); glVertex(1, 1); glVertex(2, 2); glEnd(); 2.显示列表(glCallList) 每个gl

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

javascript中的稀疏数组(sparse array)和密集数组

学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度.加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1].即数组元素之间是紧密相连的,不存在空隙.如下的js代码创建的就是一个密集数组 var data = [

.net框架-数组(Array)&amp; ArrayList &amp; List

数组(Array)特点: 初始化时规定长度 元素类型相同 数据存储连续,效率高 System.Collections.ArrayList : 初始化时无需规定长度,长度随存储的数据动态扩充与收缩 元素类型可以不相同,其内部使用object[]实现数据存储,因此会数据读写时会频敏装箱.拆箱从而影响效率 继承接口:IList.ICollection.IEnumerable.ICloneable,数据增.删.改查十分方便 System.Collections.Generic.List<T>: 范型类