一、基本介绍
1、mongo安装,下载直接解压,然后直接运行bin/mongod
2、客户端的的介绍
mongoDB shell 是一个javascript解释器
可以数学运算,可用掉标准的javascript库,可定义javascript函数
3、object id
0 1 2 3 | 4 5 6 | 7 8 | 9 10 11
Timestamp | Machine | PID | Increment
二、Creating,Updating and Deleting Documents
1、插入
批量插入:只产生一个tcp连接,只能用于应用程序接口
导入:mysql->mongo mongoimport单独命令行工具
2、删除
remove 指定条件,删除所有
drop 清除整个collection 然后需要重建索引
3、update
有两个参数,条件,一个修饰符
修饰符:更新指定字段,比如更新是个数组,
用到的修饰符:$set,$inc,$unset,$push,$pop
$addToSet防止插入重复的值
更新多条。。。。multiple
4、Upsert (在shell 里是作为一个单独方法)
如果不存在匹配就插入
在php 里 MongoCollection::update的一个选项属性设置的
** getLastError
5、总结
三个操作(insert,update,remove)看起来都是瞬发的,因为它们不会等待服务器的响应,这并不是异步
fire-and-forget(离弦的箭)
mongoDB 也是有个队列的,为每一个连接
因为每个连接都是一个队列,这样就有个问题,一个shell大量插入,令一个查询,可能是查询不到的
Mongo 保证性能就会为,每个驱动打开多个连接,为了更快的操作,但是他们内部会保证一系列请求为一个连接处理
三、find
1、指定条件范围查询
也是两个参数,第一个作为条件,第二个可以返回指定的字段(返回数减少,减少带宽,提高了查询速度)
$lt, $lte, $gt, $gte$in, $nin, $not
查询特殊的字段null,数组
$where 允许你在查询里执行arbitary javascript,使你几乎可以在查询中做任何事情
查询比较慢(BOSN转换成js对象),不能使用索引
2、指针,遍历
foreach
cursor.hasNext()
shell就立刻取到了前100条结果或者前4MB的结果
问题:程序获取前100个document并处理它们,然后将它们存储回数据库,如果一个document没有足够的空间来容纳新的document,会重新定位到collection的尾部
添加“$snapshot"选项,查询就会按照collection未被改变的视图运行
三、other
timeout, immortal
1、插入的数据不是直接写到硬盘,所有操作都记录到日志里,然后在由mongo后台多线程写到硬盘,60分钟申请空间,用已经申请出来的空间,提高速度,如果超过了预期,就放到最后插入的时候不再需要分配空间,服务器就不用查询空闲列表
2、GridFS是mongoDB里的存储二进制大文件的机制
3、db.eval 可以用来模拟事务,db.eval会锁定数据库,执行javascript,然后解锁数据库。
虽然没有回滚,这也能够让你保证一组操作是按顺序执行。
1、mongo安装,下载直接解压,然后直接运行bin/mongod
2、客户端的的介绍
mongoDB shell 是一个javascript解释器
可以数学运算,可用掉标准的javascript库,可定义javascript函数
3、object id
0 1 2 3 | 4 5 6 | 7 8 | 9 10 11
Timestamp | Machine | PID | Increment
二、Creating,Updating and Deleting Documents
1、插入
批量插入:只产生一个tcp连接,只能用于应用程序接口
导入:mysql->mongo mongoimport单独命令行工具
2、删除
remove 指定条件,删除所有
drop 清除整个collection 然后需要重建索引
3、update
有两个参数,条件,一个修饰符
修饰符:更新指定字段,比如更新是个数组,
用到的修饰符:$set,$inc,$unset,$push,$pop
$addToSet防止插入重复的值
更新多条。。。。multiple
4、Upsert (在shell 里是作为一个单独方法)
如果不存在匹配就插入
在php 里 MongoCollection::update的一个选项属性设置的
** getLastError
5、总结
三个操作(insert,update,remove)看起来都是瞬发的,因为它们不会等待服务器的响应,这并不是异步
fire-and-forget(离弦的箭)
mongoDB 也是有个队列的,为每一个连接
因为每个连接都是一个队列,这样就有个问题,一个shell大量插入,令一个查询,可能是查询不到的
Mongo 保证性能就会为,每个驱动打开多个连接,为了更快的操作,但是他们内部会保证一系列请求为一个连接处理
三、find
1、指定条件范围查询
也是两个参数,第一个作为条件,第二个可以返回指定的字段(返回数减少,减少带宽,提高了查询速度)
$lt, $lte, $gt, $gte$in, $nin, $not
查询特殊的字段null,数组
$where 允许你在查询里执行arbitary javascript,使你几乎可以在查询中做任何事情
查询比较慢(BOSN转换成js对象),不能使用索引
2、指针,遍历
foreach
cursor.hasNext()
shell就立刻取到了前100条结果或者前4MB的结果
问题:程序获取前100个document并处理它们,然后将它们存储回数据库,如果一个document没有足够的空间来容纳新的document,会重新定位到collection的尾部
添加“$snapshot"选项,查询就会按照collection未被改变的视图运行
三、other
timeout, immortal
1、插入的数据不是直接写到硬盘,所有操作都记录到日志里,然后在由mongo后台多线程写到硬盘,60分钟申请空间,用已经申请出来的空间,提高速度,如果超过了预期,就放到最后插入的时候不再需要分配空间,服务器就不用查询空闲列表
2、GridFS是mongoDB里的存储二进制大文件的机制
3、db.eval 可以用来模拟事务,db.eval会锁定数据库,执行javascript,然后解锁数据库。
虽然没有回滚,这也能够让你保证一组操作是按顺序执行。