MongoDB进阶

在mongo启动后,切换到新的mongod:

conn = new Mongo(“127.0.0.1:27017”)
db = conn.getDB(‘test’)

mongo中的_id 和ObjectId

  ObjectId是”_id”的默认类型, ObjectId使用12字节的存储空间, 有24个16进制的数字组成的字符串
0 1 2 3 4 5 6 7 8 9 10 11
时间戳 机器 PID端口 计数器
前9个字节保证了同一台机器上不同机器不同进程产生的ObjectId是唯一的,最后3个是自动增加的计数器
一秒钟允许每个进程拥有2563(16 777 216)个不同的ObjectId

在mongo中,如果不主动添加_id,会默认自动添加_id

db.help() 查看数据库级别的帮助

db.blog.help()查看集合级别的帮助
db.blog.update 查看函数的帮助

shell函数对应的javascript函数

use foo  db.getSisterDB("foo")
show dbs db.getMongo().getDBs()
show collections db.getCollectionNames()

插入

1. 批量插入
batchInset
db.foo.batchInsert([{"_id": 0}, {"_id": 1}, {"_id": 2}])

只有需要将多个文档插入到一个集合的时候, 这种方式才有用, 当前版本允许的最大的插入量为48MB, 多余这个会拆分为多个48插入

db.foo.batchInsert([{"_id": 0}, {"_id": 1}, {"_id": 1}, {"_id": 2}])

当插入这个语句时, 执行到第三个文档就会报错,前面的会成功插入,后面的就会失败
可以使用continueOnError选项 将1,2,4插入,3会跳过,shell不支持,但是所有的驱动程序都支持

2. 插入效验
  1. 如果没有_id子段,会自动增加一个
  2. 检查大小, 所有的文档都必须小于16MB, 查看doc的BSON大小 在shell中执行 Object.bsonsize(doc)
  3. 检查是否包含非UTF-8字符串

删除文档

1. 删除的速度
db.foo.remove()

删除集合中的文档,但不会删除集合本身,也不会删除集合的元信息,可以指定删除的参数

db.foo.drop()

清空整个集合, drop直接删除集合速度更快

删除是不可逆的,永久的

将文档插入到MongoDB中时,依次插入的文档在磁盘上的位置是相邻的,如果文档变大了,原先的位置就放不下了,就会移动到集合的另外的位置

更新

优先使用 _id进行替换

修改器的使用
  1. $inc 用来专门增加或者减少数字的, 只适用于整形,长整型,双精度浮点型的值, 它的值必须为数字
  2. $set
  3. $unset
  4. $push 会向已有的数组末尾加入一个元素,没有就创建一个新的数组
  5. $each
  6. $slice
  7. $addToSet 去重如有相同的值会忽略
  8. $ne
  9. $pop 删除元素
  10. $pull
修改器的速度

填充因子: 是MongoDB为每个新文档预留的增长空间
如果在进行插入和删除时会大量的移动或者是经常打乱数据, 可以使用
userPowerOf2Sizes 提高磁盘复用率,通过collMod命令来设定
db.runCommand({“collMod”: collectionName, “usePowerOf2Sizes”: true})
分配所有的空间, 得到的块大小是2的幂, 会导致初始空间分配不再高效
如果设置为false,会关闭这种特殊的分配机制,对已有的集合上运行这个命令不会对现有的数据产生影响

$upsert

为update的第三个参数, 是一种特殊的更新, 如果没有找到更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档,如果有就正常更新
db.users.update({“rep”: 25}, {“$inc”: {“rep”: 3}}, true)

$setOnInsert

在创建文档的同时创建字段并为它赋值,在之后的操作中,不再改变
db.users.update({}, {“$setOnInsert”: {“createdAt”: new Date()}}, true)

save

save是一个shell函数,如果文档不存在,就自动创建,如果有的话就更新文档。要是这个文档有”_id”, save就调用upsert, 否则就调用insert

var x = db.foo.findOne()
x.num = 42
42
db.foo.save(x)

findAndModify

返回修改之前的文档

写入安全机制

写入安全是客户端的设置,控制写入的安全级别
1. 应答式写入 写入后数据库会给出响应
2. 非应答式写入 写入后不会给出响应 根据最后执行的操作抛出异常,如果前面的操作都是无效的,最后一个有效,shell不会抛出异常
可以调用getLastError手动强制在shell中进行检查

索引基数

集合中某个字段拥有的不同值的数量, 比如age可以是男、女,这个基数就比较低。例如username每个文档都有不同的值,基数就很高
一个字段的基数越高,在这个键上建立索引越有效

GridFs存储文件

GridFs是MongoDB中用来存储大型二进制文件的一种存储机制
如果有一些不经常改变但是经常需要连续访问的大文件,可以使用GridFS

GridFS的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值