mongodb分享(二)
上次讲的:查询find\findone\pretty、条件操作符 (大于、小于、大于等于、小于等于、不等于,$type)、limit\skip、sort、Db.postjson.getIndexes();
$type:$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
BSON类型: 一种增强型的JSON格式,比JSON数据类型多,是Binary JSON 的简称。特点:解释更快。
https://blog.csdn.net/leshami/article/details/52668870
https://www.runoob.com/mongodb/mongodb-operators-type.html
上次遗留问题: mongodb与mysql 的区别?为什么用mongdb而不用mysql?
1)mongodb支持自动分片,方便帮集群添加和删除节点。对应用程序而言,好像始终在使用一个单机有mongodb服务器一样。它会自动处理数据在数据在分片上的分布,而mysql不行,mysql在增加集群节点时,需要人工分表,做数据迁移。
2 ) mongodb可以随意扩展字段,需要增加字段时很轻松就加进去了,而mysql增加字段还需要改表结果,所以mongodb适合存储这种非结构化的信息。
聚合:aggregate 管道聚合:pipeline aggregate
1 。group by
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}}]);
这里的$sum:1 相当于count(*) 要对某个字段进行sum 应写成 $sum : “$字段名”
2。 group by + where
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$match:{bwHotelID:284500}}]);
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$match:{_id:160733}}]);
db.postjson.aggregate([{$match:{bwHotelID:160733}}]);
这里的$match就相当于sql语法中的where
3。group by + 字段筛选
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}}]);
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}},{$match:{reviewcnt:4}}]);
db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}},{$match:{reviewcnt:{$ne:4}}}]);
条件操作符在match中仍然可以用。 $gt $lt $gte $lte $ne $in
4. group by + where + 字段筛选 + having
- sum
- avge
- min
- max
- push 在结果文档中插入值至一个数组 ???
- addToSet ????
- first
- last
管道聚合: 语法:db.collection.aggregate(pipeline, options)
1) project 字段筛选 及字段重命名。
2) match where
3) limit limit
4) skip skip
5) unwind
6) group group by $group语法: { $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }
7) sort order by
8) geoNear
https://blog.csdn.net/congcong68/article/details/51619882
https://blog.csdn.net/congcong68/article/details/51620040
注:group: 如果_id为null 相当于select count(*) from table
mongodb权威指南.pdf p129
7.1 聚合框架:
聚合框架中的操作符:
1)$project
2) $group
3) $sort
4) $limit
7.2 管道操作符
1)$match
2)$project (提取字段、重命名字段、对字段进行操作)
管道表达式:
数学表达式: $add、$subtract $multiply $divide $mod
日期表达式: $month、$week、$dayOfMonth、$dayOfWeek、$dayOfYear、$hour、$minute、$second
字符串表达式:$substr、$concat、$toLower、$toUpper
逻辑表达式:$cmp、$strcasecmp、$gt、$lt、$gte、$lte、$ne、$eq、$in、$nin、$and、$or、$not、$cond、$ifNull
3) $group
group by a,b ====={"$group":{"_id":{a:$a,b:$b}}}
分组操作符:
算术操作符:$sum、$avg
极值操作符: $max、$min、$first、$last
数组操作符: $addToSet、$push
4)$unwind
5) $sort
6) $limit
7) skip
8) 使用管道 :
mongodb分享(二)的更多相关文章
- QCustomplot使用分享(二) 源码解读
一.头文件概述 从这篇文章开始,我们将正式的进入到QCustomPlot的实践学习中来,首先我们先来学习下QCustomPlot的类图,如果下载了QCustomPlot源码的同学可以自己去QCusto ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- Android生成二维码--保存和分享二维码图片
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
- MongoDB(二)-- Java API 实现增删改查
一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...
- MongoDB Sharding(二) -- 搭建分片集群
在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...
- 【模型推理】量化实现分享二:详解 KL 对称量化算法实现
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下 K ...
- MongoDB十二种最有效的模式设计【转】
持续关注MongoDB博客(https://www.mongodb.com/blog)的同学一定会留意到,技术大牛Daniel Coupal 和 Ken W. Alger ,从 今年 2月17 号开始 ...
- 玩转mongodb(二):mongodb基础知识
常用基本数据类型: null null用于表示空值或者不存在的字段: {"data":null} 布尔型 布尔类型只有两个值,true和false: {"data&quo ...
- 项目分享二:APP 小红点中数字的处理
小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实 ...
随机推荐
- es修改数据类型
环境:es版本:6.5.0 es创建好了mapping后是不允许修改字段类型的,要是我们想修改字段类型怎么办呢,我们可以采用reindex的方法实现,就是创建一个新的mapping,里面的字段类型按照 ...
- TCP 的那些事儿(下)(转)
原文地址:http://kb.cnblogs.com/page/209101/ 作者: 陈皓 来源: 酷壳 发布时间: 2014-05-29 00:17 阅读: 18122 次 推荐: 19 ...
- tftp 传输文件
tftp 服务方便文件传输,但是没有理清的话,容易传输错误. -g 表示下载文件 (get) -p 表示上传文件 (put)-l 表示本地文件名 (local file) -r 表示远程主机的文件名 ...
- 1.多表查询 => 转化为一张联合大表 2.可视化工具 3.pymysql模块
多表数据 create table dep( id int primary key auto_increment, name varchar(16), work varchar(16) ); crea ...
- Xcode project 设置相关
FauxPas 这是一款Mac平台的用于检查Xcode项目的辅助工具 ,可以帮助我们找出常见的错误.隐藏的bug.不良实践以及可维护性问题和风格问题. 一, $(SRCROOT) :当前工程所在的目 ...
- django基础 -- 9.中间件
一.中间件的介绍 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级, 并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用, 用不好 ...
- 网络 --- 3 socket模块 粘包
一 .socket 模块参数及方法 二.缓冲区 三.粘包 1.两种粘包现象 ①连续的小包可能会被优化算法给组合到一起进行发送 ②第一次如果发送的数据大小2000B接收端一次性接受大小为1024, 这就 ...
- JUnit Parametrized Tests
Junit allows us to create parametrized tests. Parametrized test class has to be annotated with the @ ...
- main.dart
import 'package:flutter/material.dart'; import 'package:flysnow_2ull/index/index.dart'; // 导入index.d ...
- bzoj1566: [NOI2009]管道取珠 DP
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平 ...