mongo读书笔记(一)

xiaoxiao2025-07-07  13

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

 

转载请注明原文地址: https://www.6miu.com/read-5032677.html

最新回复(0)