mongoDB的深入理解
来源:互联网 发布:淘宝代销店铺发货地址 编辑:程序博客网 时间:2024/06/06 00:20
mongoDB的简介
分布式文件存储的NoSql
文档是mongoDB的基本单位,每一个文档都有与之对应的ID
文档里边可以是多个键值对
文档里边可以嵌套另一个文档
一个集合里边可以有多个文档
一个数据库里边可以有多个集合
聚集分析
1、管道模式进行聚集
常用的管道模式有以下
$match过滤文档,只传递匹配的文档到管道中的下一个步骤
db.book.insert({book_id:1,num:100,status:"normal"})db.book.insert({book_id:2,num:200,status:"normal"})db.book.insert({book_id:3,num:200,status:"sold"})db.book.insert({book_id:1,num:200,status:"normal"})db.price.aggregate([ { $group:{ _id:"$book_id", count:{$sum:1} } }, {$match:{count:{$gt:1}} } ])
会返回的结果
{ "result" : [ { "_id" : null, "count" : 5 } ], "ok" : 1}
SELECT count(*) as count1 from books
会返回 count1 4
等价于
db.book.aggregate([ { $group:{ _id:null, count1:{$sum:1} } } ])
SELECT sum(num) as total from books
统计books表中所有num的和 会返回700
等价于
db.book.aggregate([ { $group:{ _id:null, sum:{$sum:"$num"} } } ])
SELECT book_id, sum(num) as total from books GROUP BY book_id
实现分别统计相同的book_id的总体的num值
db.book.aggregate([ { $group:{ _id:"$book_id", total:{$sum:"$num"} } } ])
MapReduce模聚集
为海量数据数据的查询分析,用mongoDB的做分布式,然后再用MapReduce 做数据分析
Select sum(num) as value,book_id as _id 6yh from books where status ="normal" group by book_id
查询到的结果为
value _id
300 1
200 2
使用mongoDB的执行
Db.books.mapreduce({Function(){emit(this.book_id,this.num);},Function(key,values){return Array.sum(values);},{Query:{status:"normal"},Outresult:"books_totals"}})
代码分析:
以上相当于关系数据库中如下sql
Select sum(num) as value,book_id as _id 6yh from books where status =”normal” group by book_id
Mapreduce的解决方案:
定义一个map
Function(){emit(this.book_id,this.num);}
定义reduce
Function(key,values){return Array.sum(values);}
执行mapreduce函数
Query:{status:”normal”},返回状态为normal的值,同时定义了保存结果的集合名,最后的输出结果将保存在集合books_totals中。
注意:这里的map、reduce函数都是利用javascript编写的函数,其中map函数的关键部分是emit(key,value)函数,此函数的调用使集合使集合中的document对象按照key值生成一个value,形成一个键值对。其中key可以单一field,也可以由多个field组成,mongodb会按照key生成对应的value值,value为一个数组。
Reduc函数的定义中有参数key和value,其中key就是上面map函数中指定的key值,value就是对应key对应的值,Array.sum(value)这里是对数组中的值求和,按照不同的业务需要,我们可以编写自己的js函数来处理。
3、简单聚集函数
1、distinct函数
db.orders.distinct(key,)
第一个参数为filed 第二个参数为查询选择器
db.book.distinct("book_id")
会选择出所有文档中不同的book_id
2、count函数 用于统计查询返回的记录总数
db.book.find().count()
会返回4
node版原生的mongoDB驱动
1、声明依赖关系
2、定义数据库主机端口
3、建立数据库连接
4、创建数据库文档
5、输出一个新创建的文档
- mongoDB的深入理解
- MongoDB的十个深入理解
- mongoDB深入理解
- 深入理解MongoDB
- 深入理解mongodb和hbase区别
- mongodb系列02-------深入理解索引原理
- mongodb 的查询深入剖析
- session的深入理解
- SDRAM的深入理解
- 对话框的深入理解
- 栈的深入理解
- Hashmap的深入理解
- socket的深入理解
- MVC的深入理解
- Aop的深入理解
- 数据仓库的深入理解
- FileChannel的深入理解
- LinkedList的深入理解
- UIButton的点击状态
- react-native listview remove item
- SysTick定时器和delay延迟函数
- svn提交报错的一个说明
- codeforces Round_369 C. Coloring Trees
- mongoDB的深入理解
- Java ConcurrentModificationException异常原因和解决方法
- spring与mybatis整合
- SICP 1.01-1.05
- 如何处理eclipse中adb没有服务的问题
- 黑马程序员高端ios培训:苹果一条公告搅混了大家的脑洞
- BOSS系统
- JVM架构(018)_如何监控jvm的运行情况
- basePath的一般用法和常见方法