上次讲的:查询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

  1. sum
  2. avge
  3. min
  4. max
  5. push 在结果文档中插入值至一个数组 ???
  6. addToSet   ????
  7. first
  8. 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分享(二)的更多相关文章

  1. QCustomplot使用分享(二) 源码解读

    一.头文件概述 从这篇文章开始,我们将正式的进入到QCustomPlot的实践学习中来,首先我们先来学习下QCustomPlot的类图,如果下载了QCustomPlot源码的同学可以自己去QCusto ...

  2. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...

  3. Android生成二维码--保存和分享二维码图片

    之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...

  4. MongoDB(二)-- Java API 实现增删改查

    一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...

  5. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  6. 【模型推理】量化实现分享二:详解 KL 对称量化算法实现

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本文剖析一下 K ...

  7. MongoDB十二种最有效的模式设计【转】

    持续关注MongoDB博客(https://www.mongodb.com/blog)的同学一定会留意到,技术大牛Daniel Coupal 和 Ken W. Alger ,从 今年 2月17 号开始 ...

  8. 玩转mongodb(二):mongodb基础知识

    常用基本数据类型: null null用于表示空值或者不存在的字段: {"data":null} 布尔型 布尔类型只有两个值,true和false: {"data&quo ...

  9. 项目分享二:APP 小红点中数字的处理

    小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实 ...

随机推荐

  1. zynq基础-->linux下软件应用

    操作系统:Ubuntu 16.04 LTS 应用软件:Vivado 2016.2  + petalinux 2016.2 参考官方应用手册:ug1144-petalinux-tools-referen ...

  2. 树之105 Construct Binary Tree from Preorder and Inorder Traversal

    题目链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 参考链 ...

  3. 牛客网数据库SQL实战(11-15)

    11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manager ...

  4. Python 模块的加载顺序

    基本概念 module 模块, 一个 py 文件或以其他文件形式存在的可被导入的就是一个模块 package 包,包含有 init 文件的文件夹 relative path 相对路径,相对于某个目录的 ...

  5. cf213E 线段树维护hash

    链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...

  6. Linux 题目收集

    目录 1.库函数,系统调用,用户态及内核态 2.查看进程,杀死进程 3.查看文档 4.scp命令 5.不在 sudoers 文件中.此事将被报告 6.chmod: 更改"minikube&q ...

  7. Run tomcat on port 80 not 8080

    How to run Tomcat on Port 80 A standard Tomcat installation starts the webserver on port 8080 – whic ...

  8. nohup 让进程在后台可靠运行的几种方法

    1. nohup nohup 无疑是我们首先想到的办法.顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号. nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即 ...

  9. 论文笔记: Dual Deep Network for Visual Tracking

    论文笔记: Dual Deep Network for Visual Tracking  2017-10-17 21:57:08  先来看文章的流程吧 ... 可以看到,作者所总结的三个点在于: 1. ...

  10. Sample Classification Code of CIFAR-10 in Torch

    Sample Classification Code of CIFAR-10 in Torch from: http://torch.ch/blog/2015/07/30/cifar.html req ...