MongoDB的增删改查(CRUD)初体验

五一第一天,祝自己生日快乐的同时,中午闲来无事,打开了硬盘上早已下载好的大地的免费课程 ,从 mongodb 的安装、环境配置,再到简单的在命令行中的 CRUD 操作,算是有了个初体验。

这里还是要感谢大地老师,慷慨的提供了够我看很久的免费视频,所以也愿意贴个链接表示感谢,最初是在 nodejs 中文社区看到的推广地址。

继续回到 mongodb,官网下载后,windows 中要配置环境变量,将 mongodb 的安装路径(跟着官网的安装步骤,默认安装到 c 盘就行了),一直找到 /bin目录, 然后复制路径,设置到 windows 中的 path 全局环境变量中就行。

当然,由于目前只学了在 CMD 中进行 CRUD,所以简单记录一下,具体的语法自己看视频,或者看文档就行:


增 Create

  1. use some_database_name 还不算创建数据库,只有真正向某个集合(表)中插入了数据之后,才会创建数据库 some_database_name:
db.user.insert({"name": "xiaoming", "age": 25})

查 Retrieve

  1. 终端中输入 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)
  1. 如果对返回数据进行 sort 排序呢?其实这里的链式调用似乎有些误导性,据我测试,实际上是对 find 出来的结果,首先就进行了 sort 排序,然后是 skip,最后才是 limit (逻辑顺序上是这样,具体 mongodb 内部如何处理,不详):
db.user.find({"age": 25}).limit(10).skip(10).sort(10)

改 Update

  1. 修改数据时注意是根据第一个参数进行查找,然后根据提供的第二个参数,修改查找到的第一项返回结果。如果指定了$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

  1. 删除数据时,如果删除了数据库中所有的集合(表),那么数据库也会自动被删除,或者直接删除数据库:
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. 大地的免费课程

原文地址:https://www.cnblogs.com/nicholaswang/p/10810111.html