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. 大地的免费课程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355