A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 苟利国家生死 于 2018-5-26 10:32 编辑

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. 批量插入batchInsetdb.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. 插入效验
  • 如果没有_id子段,会自动增加一个
  • 检查大小, 所有的文档都必须小于16MB, 查看doc的BSON大小 在shell中执行 Object.bsonsize(doc)
  • 检查是否包含非UTF-8字符串
删除文档1. 删除的速度db.foo.remove()
删除集合中的文档,但不会删除集合本身,也不会删除集合的元信息,可以指定删除的参数
db.foo.drop()
清空整个集合, drop直接删除集合速度更快
删除是不可逆的,永久的
将文档插入到MongoDB中时,依次插入的文档在磁盘上的位置是相邻的,如果文档变大了,原先的位置就放不下了,就会移动到集合的另外的位置
更新
优先使用 _id进行替换
修改器的使用
  • $inc 用来专门增加或者减少数字的, 只适用于整形,长整型,双精度浮点型的值, 它的值必须为数字
  • $set
  • $unset
  • $push 会向已有的数组末尾加入一个元素,没有就创建一个新的数组
  • $each
  • $slice
  • $addToSet 去重如有相同的值会忽略
  • $ne
  • $pop 删除元素
  • $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的使用

1 个回复

正序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马