MongoDB的增删改查(CRUD)初体验
五一第一天,祝自己生日快乐的同时,中午闲来无事,打开了硬盘上早已下载好的大地的免费课程 ,从 mongodb 的安装、环境配置,再到简单的在命令行中的 CRUD 操作,算是有了个初体验。
这里还是要感谢大地老师,慷慨的提供了够我看很久的免费视频,所以也愿意贴个链接表示感谢,最初是在 nodejs 中文社区看到的推广地址。
继续回到 mongodb,官网下载后,windows 中要配置环境变量,将 mongodb 的安装路径(跟着官网的安装步骤,默认安装到 c 盘就行了),一直找到 /bin
目录, 然后复制路径,设置到 windows 中的 path
全局环境变量中就行。
当然,由于目前只学了在 CMD 中进行 CRUD,所以简单记录一下,具体的语法自己看视频,或者看文档就行:
增 Create
use some_database_name
还不算创建数据库,只有真正向某个集合(表)中插入了数据之后,才会创建数据库 some_database_name:
db.user.insert({"name": "xiaoming", "age": 25})
查 Retrieve
- 终端中输入
db
,可以查看当前处于哪个数据库中,输入show dbs
,查看当前创建了哪些数据库,输入show collections
查看当前数据库有哪些集合(表)。
假如查询分页数据,比如age
为 25 的记录,每一次返回10条,同时跳过之前的数据记录,这时候下面两种写法效果一样,我的解释是,skip
优先级更高,即两种写法都会先跳过10条数据,然后才会返回limit
指定数目的数据:
db.user.find({"age": 25}).skip(10).limit(10)
// 反过来想想,先返回10条数据,然后又跳过了10条数据,那岂不是返回空,所以是不可能的
db.user.find({"age": 25}).limit(10).skip(10)
- 如果对返回数据进行
sort
排序呢?其实这里的链式调用似乎有些误导性,据我测试,实际上是对find
出来的结果,首先就进行了sort
排序,然后是skip
,最后才是limit
(逻辑顺序上是这样,具体 mongodb 内部如何处理,不详):
db.user.find({"age": 25}).limit(10).skip(10).sort(10)
改 Update
- 修改数据时注意是根据第一个参数进行查找,然后根据提供的第二个参数,修改查找到的第一项返回结果。如果指定了
$set
,那么会根据$set
的属性和查到到的结果进行比对,如下所示,name
会更新为xiaoming666
,同时会增加age
字段:
db.user.find() // 假设返回如下:
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a"), "name": "xiaoming", "sex": "男" }
// 然后更新:
db.user.update({"name": "xiaoming"}, {$set: {"name": "xiaoming666", "age": 18}})
// 此时结果为:
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a"), "name": "xiaoming666", "sex": "男", "age": 18 }
那如果不指定 $set
属性,则会用update
时的第二个参数,覆盖根据第一个参数查找到的第一项数据:
// 接着上面进一步操作:
db.user.update({"name": "xiaoming"}, {})
// 可以看到完全被替换了,只剩下自带的 "_id" 字段
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a") }
删 Delete
- 删除数据时,如果删除了数据库中所有的集合(表),那么数据库也会自动被删除,或者直接删除数据库:
db.some_collection_name.drop() // 1. 删除集合(表)
db.dropDatabase() // 2. 直接删除当前正在 use 的数据库
使用 remove
删除数据时,如果传入了 {}
会删除该集合下的所有数据,否则只会删除根据参数条件匹配到的数据,也可以传入第二个可选参数,指定 justOne
字段,表示只删除匹配项的第一条数据:
db.user.remove({})
db.user.remove({"name": "xiaoming"}) // 删除 user 集合中所有 name 是 xiaoming 的数据
db.user.remove({"name": "xiaoming"}, {"justOne": true}) // 只删除匹配项的第一条
个人学习中的小记录,不定期更新/更正,方便日后自我查阅,理解粗浅,如有明显误导,抱歉望斧正。
参考连接:
1. 大地的免费课程