mongodb-aggregate聚合日期分组
来源:互联网 发布:京东咚咚工作台mac版 编辑:程序博客网 时间:2024/05/16 10:42
最近有个妹子,在项目中遇到了mongodb中时间类型查询和聚合分组的事情,本来搞IT的妹子就很少,所以希望大家能够善待IT程序媛,好了废话不多说了。
mongdob里面保存的是json类型的数据,如果你在插入数据的时候,时间字段插入的是日期类型的数据(Date),那么在mongodb里面会是ISODate类型的。ISODate和咱们现在的时区不一样,IOSDate默认是慢8个小时的。所以再次操作时间类型的时候,一定要慎重,慎重。
mongodb的聚合框架(aggregate)提供了很多修改器用来修改去获取IOSDate类型的字段的年、月、日、时、分、秒、等;同时mongodb也提供了相关的修改器去把IOSDate类型的时间转换为通常我们可以接受的时间格式;
$dayOfYear: 返回该日期是这一年的第几天。(全年366天)$dayOfMonth: 返回该日期是这一个月的第几天。(1到31)$dayOfWeek: 返回的是这个周的星期几。(1:星期日,7:星期六)$year: 返回该日期的年份部分$month: 返回该日期的月份部分(between 1and12.)$week: 返回该日期是所在年的第几个星期(between 0and53)$hour: 返回该日期的小时部分$minute: 返回该日期的分钟部分$second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒。)$millisecond:返回该日期的毫秒部分(between 0and999.)$dateToString: { $dateToString: { format: <formatString>, date: <dateExpression> } }
$dateToString:{ $dateToString: { format: <formatString>, date: <dateExpression> } }``formatString:需要返回的日期式,日期格式通常为以:%Y Year (4 digits, zero padded) 0000-9999%m Month (2 digits, zero padded) 01-12%d Day of Month (2 digits, zero padded) 01-31%H Hour (2 digits, zero padded, 24-hour clock) 00-23%M Minute (2 digits, zero padded) 00-59%S Second (2 digits, zero padded) 00-60%L Millisecond (3 digits, zero padded) 000-999%j Day of year (3 digits, zero padded) 001-366%w Day of week (1-Sunday, 7-Saturday) 1-7%U Week of year (2 digits, zero padded) 00-53%% Percent Character as a Literal 这么说可能比较空洞,直接上例子:db.test.aggregate( [ { $project: { ymd: { $dateToString: { format: "%Y-%m-%d", date: "$ date" } }, time: { $dateToString: { format: "%H:%M:%S:%L", date: "$ date" } } } } ])mongodb常用的数组修改器:$inc 用来增加已有键的值,或者在键不存在的时候创建一个键,它只能修改整数型或浮点型,比如统计累加、投票.它键的值必须为数字,不能使用字符串、数组等其他值. $set 用来指定一个键的值,如果这个键没有就创建它.有就修改.它还可以修改内嵌文档,甚至可以修改键的数据类型. $unset 用来删除,将键完全删除. $push 如果指定的键已经存在,它会向已有的数组末尾加入一个元素,要是没有就会创建一个数组. $ne 如果一个值不在数组里面就把它加进去. $addToSet 同上,有时候ne根本行不通,有些时候更适合用这个.它可以避免重复. $each addToset和它组合起来可以添加多个不同的值,而用ne和push组合就不能实现. $pop可以从数组任何一端删除元素,{$pop : {key : 1}}1表示从末尾删除.-1表示从头部开始. $pull 根据特定的条件来删除元素.它会将所有匹配的部分删掉. $lt $lte 小,小于等于. $gt $gte 大,大于等于. $ne 表示不等于.它能用于所有类型的数据.$in 可以用来查询一个键的多个值. $nin 与之相反. $or 更通用,用来完成多个键值的任意给定值. $not元条件句,可以用在任何其他条件之上.取模($mod) $exists 用来条件判定键值是否已经存在. $all 用来通过多个元素来匹配数组. $size 可以用其查询制定长度的数组,size并不能与其他查询子句组合,但是这种查询可以通过在文档中添加一个size键的方式来实现.这样每次向指定数组添加元素的时候,同时增加size的值.不幸的是,这种技巧并不能与addToSet操作符同时使用. $slice 返回数组的一个子集合.它也可以返回指定地方的指定条数.如果数组长度不够则返回指定地方之后的所有数据.另外,除非特别声明,否则使用slice时将返回文档中的所有键,这与其他的不太一样. $elemMatch 它会限定条件进行分组,仅当需要对一个内嵌文档的多个键操作时才会用到. 并且只返回内嵌文档中符合条件的第一条数据$where 用它可以执行任意JavaScript作为查询的一部分,这就使得查询能做(几乎)任何事情.最典型的就是比较两个文档的键的值是否相等.一定要避免使用where.因为它在速度上要比常规查询慢很多,只有走投无路才考虑. 将常规查询作为前置过滤,与where组合使用可以不牺牲性能.如果可能的话,用索引根据非where子句进行过滤,where只用于对结果进行调优.mongodb-aggregate:$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。$limit:用来限制MongoDB聚合管道返回的文档数。$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。$group:将集合中的文档分组,可用于统计结果。$sort:将输入文档排序后输出。$geoNear:输出接近某一地理位置的有序文档。$sum 计算总和。$avg 计算平均值$min 获取集合中所有文档对应值得最小值。 $max 获取集合中所有文档对应值得最大值。 $push 在结果文档中插入值到一个数组中。 $addToSet 在结果文档中插入值到一个数组中,但不创建副本。可去重$first 根据资源文档的排序获取第一个文档数据。 $last 根据资源文档的排序获取最后一个文档数据
0 0
- mongodb-aggregate聚合日期分组
- mongodb聚合利用日期分组。
- mongodb聚合函数aggregate操作 分组分页查询统计
- mongodb aggregate 聚合操作
- MongoDB aggregate聚合
- MongoDB aggregate 聚合管道
- mongodb 聚合aggregate 乘法
- MongoDB中的聚合 aggregate
- MongoDB aggregate() 聚合
- MongoDB | 聚合 aggregate
- MongoDB的聚合(aggregate)
- MongoDB的聚合函数 Aggregate
- MongoDB的聚合函数 Aggregate
- mongodb-aggregate(聚合函数)
- Mongodb 聚合 分组
- MongoDB,分组,聚合
- ThinkPHP支持MongoDb Aggregate方法聚合管道
- MongoDB aggregate聚合函数的使用
- mysql管理数据库用户和访问权限
- 多线程-锁
- LINUX学习笔记
- Django之model admin自定义后台管理
- 数据结构——线性表 (顺序表、单链表、静态链表、循环链表、双向链表)
- mongodb-aggregate聚合日期分组
- Halcon算子_fuzzy_measure_pairs
- Java构造器排序
- windows实验3——c++
- 关于.9的那些事儿
- LPC2478驱动nand flash(k9f5608)
- arm-linux上实现的VPN客户端(PPTP)
- selenium 数据驱动 (基于TestNG CSV)
- 简单讲述关于C#的线程,任务,同步