mongoDB简介

传统数据库技术回顾

数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库?

  • 理由之1: 数据库有行、列的概念,数据有关系,数据不是散的。

老牌数据库,比如MySQL、SQL Server、Oracle、Access。这些数据库,我们管他们叫做结构型数据库。为什么?因为每个表中,都有明确的字段,每行记录,都有这些字段。不能有的行有,有的行没有。

image.png
  • 理由二:数据库能够提供非常方便的接口,让增删改查操作变得简单
    我们的老牌数据库,都无一例外的使用SQL语言,管理数据库。
    SQL就是structure query language。
    比如,查询所有女生: SELECT * FROM step1 WHERE xingbie = '女';
    再比如,查询所有女生,并且年龄20~24之间,且在北京:
SELECT * FROM step1 WHERE xingbie = '女' AND nianling < 24 AND nianling >= 20 AND xianzaisuozaidi = '北京';
  • 理由之三:数据库不能自己玩儿,要给向PHP、.net、jsp等语言提供接口。
    用php这些语言,能够向数据库之中增删改查。
    老牌数据库,都是结构型数据库,现在出了什么问题?
    比如,我们现在想往一个已经有1000条数据的数据库中增加一个字段“高中信息”。


    image.png

之前已经存在的数据,实际上不需要增加这个字段。因为这些用户已经填写完毕表单了,不再需要高中信息了。我们的意图就是在今后注册的用户,需要填写高中信息。但是,我们刚才说了,所谓的字段,是表的一个结构。所有的行都必须拥有,不能有的行有这个字段,有的行没有这个字段。
可想而知,大数据时代,数据库中有100万条数据都算少的。我们如果要动字段,时间太长。

所以,字段这个东西,太不灵活。

数据不灵活。一个字段,需要是同样类型的数据。不能一行记录是文本,一行记录是数字。

非结构型数据库NoSQL应运而生。
NoSQL是个怪胎,无法挑战老牌数据库,但是在大数据时代有自己的意义。


NoSql

非结构型数据库。
没有行、列的概念。用JSON来存储数据。
集合就相当于“表”,文档就相当于“行”。

image.png

文档就是JSON,上下文语境中,也是JavaScript范畴,所以我们的数据库也是JS范畴的东西,JS全栈。

image.png

<em>因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:</em>

  1. 数据模型比较简单
  2. 需要灵活更强的IT系统
  3. 对数据库性能要求较高
  4. 不需要高度的数据一致性
  5. 对于给定key,比较容易映射复杂值的环境。

我们看,有些系统,特别需要筛选。比如,筛选出所有女生大于20岁的。那么SQL型数据库,非常擅长!因为它有行、列的概念。
但是,有些系统,真的不需要进行那么多的筛选,比如站内信。站内信只需要存储就好了。不需要筛选。那么NoSQL的。
NoSQL不是银弹,没有资格挑战老牌数据库,还是特定情况下,是适合的。

MongoDB相关命令

下面来简单介绍一下mongo命令

mongo   使用数据库
mongod  开机
mongoimport  导入数据

开机命令:


image.png

--dbpath就是选择数据库文档所在的文件夹。
也就是说,mongoDB中,真的有物理文件,对应一个个数据库。U盘可以拷走。
一定要保持,开机这个CMD不能动了,不能关,不能ctrl+c。 一旦这个cmd有问题了,数据库就自动关闭了。

所以,应该再开一个cmd。输入

image.png

那么,运行环境就是了。
下面是mongo语法:

  • 列出所有数据库:
show dbs
  • 使用某个数据库
use 数据库名字  eg:use abc

如果想新建数据库,也是use。use一个不存在的,就是新建。

  • 查看当前所在数据库
db
  • 插入数据:


    image.png

student就是所谓的集合。集合中存储着很多json。
student是第一次使用,集合将自动创建。

mongoDB中的增删改查

要管理数据库,必须先开机,开机使用mongod --dbpath c:\mongo
管理数据库:mongo (一定要在新的cmd中输入)

  • 清屏
cls
  • 查看所有数据库列表
show dbs
  • 使用数据库、创建数据库
use itcast

如果真的想把这个数据库创建成功,那么必须插入一个数据。
数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法:

db.student.insert({“name”:”xiaoming”});

db.student 系统发现student是一个陌生的集合名字,所以就自动创建了集合。

  • 删除数据库,删除当前所在的数据库
db.dropDatabase();

插入数据

插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。

db.student.insert({"name":"xiaoming"});

我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,然后导入数据库:

mongoimport --db test --collection restaurants --drop --file primer-dataset.json

-db test 想往哪个数据库里面导入
--collection restaurants 想往哪个集合中导入
--drop 把集合清空
--file primer-dataset.json 哪个文件

这样,我们就能用sublime创建一个json文件,然后用mongoimport命令导入,这样学习数据库非常方便。

查找数据

查找数据,用find。find中没有参数,那么将列出这个集合的所有文档:
db.restaurants.find()

精确匹配:
db.student.find({"score.shuxue":70});

多个条件:
db.student.find({"score.shuxue":70 , "age":12})

大于条件:
db.student.find({"score.yuwen":{$gt:50}});

或者。寻找所有年龄是9岁,或者11岁的学生
或者。寻找所有年龄是9岁,或者11岁的学生

查找完毕之后,打点调用sort,表示升降排序。
查找完毕之后,打点调用sort,表示升降排序。

修改数据

修改里面还有查询条件。你要该谁,要告诉mongo。
查找名字叫做小明的,把年龄更改为16岁:
db.student.update({"name":"小明"},{$set:{"age":16}});

查找数学成绩是70,把年龄更改为33岁:
db.student.update({"score.shuxue":70},{$set:{"age":33}});

更改所有匹配项目:
By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});

完整替换,不出现$set关键字了:
db.student.update({"name":"小明"},{"name":"大明","age":16});

删除数据

db.restaurants.remove( { "borough": "Manhattan" } )

By default, the remove() method removes all documents that match the remove condition. Use the justOne option to limit the remove operation to only one of the matching documents.
db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )

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

推荐阅读更多精彩内容