mongo读书笔记(一)

show dbs 显示所有库

 

use db_name 切换到db_name库

 

show collections 显示当前库的所有文档集合

 

db.user_table.insert({"bar":"baz"}) 插入文档,会自动生成一个objectID

 

 db.user_table.insert([{"_id":0},{"_id":1},{"_id":2}]) 批量插入多个文档

 

> db.user_table.remove({"bar":"baz" } )
WriteResult({ "nRemoved" : 1 })

//条件删除,如果不加条件,默认删除里面的所有文档,但是集合本身不被删除,里面的元信息也不会被删除

 

drop的删除速度比remove快,但是集合和元信息也会都被删除,drop的条件删除会把所有文档都删除?

> db.user_table.drop({"name":"wgy" } )
true      //执行完这个后所有数据都没了,但是集合信息还在?慎用 drop

修改器

$set 用来指定一个字段的值,如果这个字段不存在,则创建它。

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$set":{"favorite book":"war and peace"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

$set 也可以 修改键的类型

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$set":{"favorite book":["war and peace","ender's game"]}}) //现在类型变成了array类型

$unset 用来删除一个字段

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$unset":{"favorite book":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

还支持修改内嵌文档

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$set":{"author.name":"joe schmoe"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

增加、修改或删除键时,应该使用$修改器,如果用下面的做法就会将整个文档替换为你更新的内容

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"age":"40"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })//会将整个文档替换成age:40

 

增加和减少 

$inc 修改器用来增加已有键的值,或者该键不存在那就创建一个。对于更新分析数据、因果关系、投票或者其他有变化数值的地方 ,使用这个都会非常方便。

db.table_name.update({"url":"www.example.com"},...{"$inc":{"pageviews":1}})

将pageviews原子操作+1

添加元素:$push

如果数组已经存在,会向已有的数组末尾加入一个元素,要是没有就创建一个新数组

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$push":{"comments":{"name":"joe","email":"joe@example.com","content":"nice post."}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

$push 与 $each 搭配可以一次添加多个值

> db.user_table.update({"_id":ObjectId("5bd16a9f702d5b35cc7a8adc")},{"$push":{"hourly":{"$each":[254,4513,466,456]}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

如果希望数组的最大长度是固定的,可以将$slice 与 $push组合在一起使用

对应的有$pop

其余的还有$ne, $addToSet,$定位符,

修改器速度

有的修改器运行比较快 ,$inc就能就地修改,因为不需要改变文档大小。 这是因为将文档插入到mongo中时,依次 插入的文档在磁盘上的位置是相邻的。因此,如果一个文档变大了,原先的位置就放不下了,就会重新开辟内存移到新开辟的内存中去。

填充因子:是mongo为每个文档预留的空间(类似于go中的cap容量)

1.最初文档之间没有多余的空间

2.当一个文档超过空间大小时,就释放掉原先的空间,开辟新的空间,填充因子就会变大

3.之后插入的文档都会拥有填充因子指定大小的增长空间,如果再之后的插入中不再发送文档移动,填充因子会逐渐变小

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小卒曹阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值