MongDB学习笔记_修改器及其他

1.关于MongoDB

简单介绍一下mongodb。
mongodb是一种基于文档的NOSQL数据库,是scheme free的数据库,没有模式,模式自由也就意味着没有固定的表结构,所有存储的数据就更加自由。
注意这里说的文档是一种抽象的概念,其具体的实现取决于使用的驱动和编程语言。
因为MongoDB中的通信大量依赖于文档,所以需要一种所有驱动,工具和进程都能共享的文档表达方式。这种表达方式叫Binary JSON(BSON)。BSON是轻量级的二进制格式,能将MongoDB的所有文档表示为自己字符串.数据库能理解BSON,存在磁盘上的文档。也是这种格式。
学习mongo还需要注意的几个名词   GridFS   ,  Map Reduce
GridFS是一种文件系统,用于存放大量小的文件
Map Reduce 是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。

2.插入和更新

向mongo中添加数据,使用insert方法就插入了一个文档db.COLLECTION_NAME.insert({})  这个insert操作会给文档增加一个“_id”的键,这是一个索引。
【一次发送数十个数百个乃至数千个文档会明显提高插入的速度,原因:一次批量插入只是单个TCP请求,可以避免多个零碎请求带来的开销,无需处理大量的消息头,可以减少插入时间】
2.1插入的原理
数据   ---->   BSON   ---->    数据库解析  ---->  检验是否包含“_id”键+文档是否超过4M  --->  将文档原样存入数据库
        当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送入数据库,数据库解析BSON,检验是否包含_id键并且文档不超过4M,除此之外不做别的数据验证,就只是简单的将文档原样的存入到数据库
【好处:让数据库更加安全,远离注入攻击】
【坏处:允许插入无效的数据】
2.2删除文档
使用db.COLLECTION_NAME.remove() 【注意:使用remove删除集合中的所有文档,但是不会删除集合本身原有的索引也会保留】。
remove可以接受一个查询文档作为可选参数,给定参数后,只有符合条件的文档才会被删除。
【笔记到这里,发觉文档这个词在mongo中的意思是{}这种格式的数据】
删除文档通常很快,但是清除整个集合,直接删除集合,然后重建索引会更快,使用db.drop_collection("COLLECTION_NAME")清除整个集合。
2.3更新文档
可以使用update方法修改文档
db.COLLECTION_NAME.update({},{},false|true,false|true);   可以看出update支持四个参数,第三个和第四个是可选参数,第一个是查询文档,第二个是更新操作文档,第三个是upsert,第四个是更新查询到的所有文档。这里捎带说明一下upsert和普通update的区别:
upsert是一种特殊的update,如果没有文档符合更新条件,那么就以条件和更新文档为基础,新建一个文档。
如:【db.foo.update({"name":"zhangsan","age":22},{"$set":{"email":["zhangsan@126.com"]}},true)    结果就是新加一个文档{"name":"zhangsan","age":22,"email":["zhangsan@126.com"]}】但是如果是这样的不加$set   【db.foo.update( {  "name" : "zhangsan" , "age" :22 } , { "sex" : "nan"   },true)】那么结果就是{"sex":"nan"}
2.4修改器说明
【大小写敏感】
$inc    修改器    递增   对int有效
$set    修改器    修改的时候只修改一部分文档,不会完全替换掉
$unset 修改器  删除一个属性的时候
$push  $pop   $addToSet   数组修改器 【数组修改器中需要注意的是,修改数组中的某个属性的时候使用.连接】 
说到数组修改器就要说一个定位符的问题了,一般数组可以使用   数组名.0.属性名   或者如果条件中有某个数组例如    "comments.name" : "hello world"   那么可以使用 "comments.$.name" : "nihao"   这样$表示的是数组当前的这个位置。
注意   $addToSet   区分大小写   通常和$each  一起使用一次给数组中添加多个值    多个值使用[]括起来表示数组。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值