node12---mongodb
一、传统数据库技术回顾
数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库? 理由之1: 数据库有行、列的概念,数据有关系,数据不是散的。
老牌数据库,比如MySQL、SQL Server、Oracle、Access。这些数据库,我们管他们叫做结构型数据库。为什么?因为每个表中,都有明确的字段,每行记录,都有这些字段。不能有的行有,有的行没有。 理由二:数据库能够提供非常方便的接口,让增删改查操作变得简单
我们的老牌数据库,都无一例外的使用SQL语言,管理数据库。
SQL就是structure query language。
比如,查询所有女生: SELECT * FROM step1 WHERE xingbie = '女';
再比如,查询所有女生,并且年龄20~24之间,且在北京:
1SELECT * FROM step1 WHERE xingbie = '女' AND nianling < 24 AND nianling >= 20 AND xianzaisuozaidi = '北京'; 理由之三:数据库不能自己玩儿,要给向PHP、.net、jsp等语言提供接口。
用php这些语言,能够向数据库之中增删改查。
老牌数据库,都是结构型数据库,现在出了什么问题?
比如,我们现在想往一个已经有1000条数据的数据库中增加一个字段“高中信息”。 之前已经存在的数据,实际上不需要增加这个字段。因为这些用户已经填写完毕表单了,不需要再手机高中信息了。我们的意图就是在今后注册的用户,需要填写高中信息。但是,我们刚才说了,所谓的字段,是表的一个结构。所有的行都必须拥有,不能有的行有这个字段,有的行没有这个字段。
可想而知,大数据时代,数据库中有100万条数据都算少的。我们如果要动字段,时间太长。
所以,字段这个东西,太不灵活。 数据不灵活。一个字段,需要是同样类型的数据。不能一行记录是文本,一行记录是数字。 非结构型数据库NoSQL应运而生。
NoSQL是个怪胎,无法挑战老牌数据库,但是在大数据时代有自己的意义。
二、NoSQL
非结构型数据库。没有行、列的概念。用JSON来存储数据。(适合表结构经常变化的)
集合就相当于“表”,文档就相当于“行”。

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

因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。
我们看,有些系统,特别需要筛选。比如,筛选出所有女生大于20岁的。那么SQL型数据库,非常擅长!因为它有行、列的概念。
但是,有些系统,真的不需要进行那么多的筛选,比如站内信。站内信只需要存储就好了。不需要筛选。那么NoSQL的。 NoSQL不是银弹,没有资格挑战老牌数据库,还是特定情况下,是适合的。
三、MongoDB安装
官网:https://www.mongodb.com/
手册:https://docs.mongodb.org/manual/ win7系统需要安装补丁,KB2731284。 此时,我们看一下装好的文件夹:
C:\Program Files\MongoDB\Server\3.0\bin 加入到系统的path环境变量中(这是数据库文件位置,不是数据库位置,数据库位置可以改) 那么我们就能在系统的任何盘符,使用mongo命令了:
mongod.exe 开机 mongo.exe 使用数据库 mongoimport.exe 导入数据
开机命令:
mongod --dbpath mongeDBDATA --dbpath就是选择数据库文档所在的文件夹。
也就是说,mongoDB中,真的有物理文件,对应一个个数据库。U盘可以拷走。
一定要保持,开机这个CMD不能动了,不能关,不能ctrl+c。 一旦这个cmd有问题了,数据库就自动关闭了。
所以,应该再开一个cmd。输入mongo:
那么,运行环境就是mongo语法了。
列出所有数据库:
1show dbs 使用某个数据库
1use 数据库名字
如果想新建数据库,也是use。use一个不存在的,就是新建。 查看当前所在数据库
1db 插入数据: student就是所谓的集合。集合中存储着很多json。
student是第一次使用,集合将自动创建。
四、数据库使用
要管理数据库,必须先开机,开机使用mongod --dbpath c:\mongo
管理数据库:mongo (一定要在新的cmd中输入)
清屏:
1cls 查看所有数据库列表
1show dbs 使用数据库、创建数据库
1use itcast 如果真的想把这个数据库创建成功,那么必须插入一个数据。
数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法:
1db.student.insert({“name”:”xiaoming”});
db.student 系统发现student是一个陌生的集合名字,所以就自动创建了集合。 删除数据库,删除当前所在的数据库
1db.dropDatabase();
4.1 插入数据
插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。
1db.student.insert({"name":"xiaoming"}); 我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,然后导入数据库: 1mongoimport --db test --collection restaurants --drop --file primer-dataset.json
-db test 想往哪个数据库里面导入
--collection restaurants 想往哪个集合中导入
--drop 把集合清空
--file primer-dataset.json 哪个文件 这样,我们就能用sublime创建一个json文件,然后用mongoimport命令导入,这样学习数据库非常方便。
Mongo能存对象。
4.2 查找数据
查找数据,用find。find中没有参数,那么将列出这个集合的所有文档:
1db.restaurants.find()
精确匹配:
1db.student.find({"score.shuxue":70}); //score这个json的shuxue这个key的value为70的 多个条件:
1db.student.find({"score.shuxue":70 , "age":12}) 大于条件:
1db.student.find({"score.yuwen":{$gt:50}}); 或者。寻找所有年龄是9岁,或者11岁的学生
1db.student.find({$or:[{"age":9},{"age":11}]}); 查找完毕之后,打点调用sort,表示升降排序。先按照borough升序,相同就address.zipcode升序
1db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )
4.3 修改数据
修改里面还有查询条件。你要该谁,要告诉mongo。
查找名字叫做小明的,把年龄更改为16岁:
1db.student.update({"name":"小明"},{$set:{"age":16}}); 查找数学成绩是70,把年龄更改为33岁:
1db.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.
1db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});
2db.student.update({},{$set:{"age":33}},{multi: true}); //所有的都改 完整替换,不出现$set关键字了:把小明这条记录改成{"name":"大明","age":16}
1db.student.update({"name":"小明"},{"name":"大明","age":16});
4.4 删除数据
1db.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.
1db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )
MongoVUE beta 是mongo数据库可视化工具
数据库示例:
{"name":"小明","age":12,"hobby":["睡觉","吃饭"],"score":{"yuwen":59,"shuxue":80}}
{"name":"小红","age":11,"hobby":["学习","看书"],"score":{"yuwen":100,"shuxue":70}}
{"name":"小强","age":13,"hobby":["打架"],"score":{"yuwen":2,"shuxue":70}}
{"name":"小陈","age":9,"hobby":["打架","看书"],"score":{"yuwen":59,"shuxue":80}}
node12---mongodb的更多相关文章
- 分布式文档存储数据库之MongoDB分片集群
前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...
- 分布式文档存储数据库之MongoDB访问控制
上一篇博客主要聊了下mongodb的分片机制以及分片集群的搭建,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13958295.html:今天我们来了解下mon ...
- 分布式文档存储数据库之MongoDB备份与恢复
前文我们聊了下mongodb的访问控制以及用户创建和角色分配,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13974656.html:今天我们来了解下mong ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
随机推荐
- 杂项-DB-分布式:HBase
ylbtech-杂项-DB-分布式:HBase HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系 ...
- Tomcat 初探(二) server.xml 配置
前言 在上一篇文章中,我们在示例中演示了网站的发布,其中涉及到了 server.xml 的修改,本文中我会给大家详细解释一下 server.xml 文件中的节点及其属性的作用,本片文章参考并摘抄了他人 ...
- BZOJ 1818 线段树+扫描线
思路: 可以把题目转化成 给你一些沿坐标轴方向的线段 让你求交点个数 然后就线段树+扫描线 搞一搞 (线段不包含断点 最后+n 这种方式 比线段包含断点+各种特判要好写得多) //By SiriusR ...
- 维基百科 MediaWiki API 解析
使用开放的 API 做一个自己的小项目,是一个很好的学习方法.但好像开放的 API 选择并不多.这里给大家多一个选择,简单介绍一下维基百科使用的 MediaWiki API. 简介 先简单介绍几个容易 ...
- Array.prototype.slice.call(arguments) 通俗法理解
Array.prototype.slice.call(arguments,num) 能将具有length属性的对象转成数组. slice 从字面上的意思可以理解为截取数组的一部分. call 从字 ...
- 使用jquery获取ul中当前正在点击的li的索引
<ul class="list"> <li>哈哈</li> <li>呵呵</li> <li>嘻嘻</l ...
- 动态修改SeekBar的颜色
方法一 1. 需求:需要改变其默认颜色,样式 2.滑竿样式 seekbar.xml <?xml version="1.0" encoding="utf-8" ...
- PHP关于注册注意的问题
1.注意转义字符的问题 get_magic_quotes_gpc()开启时,所有的 ' (单引号), " (双引号), \(反斜线) and 空字符(null)会自动转为含有反斜线的溢出字符 ...
- Unity 设置2台摄像机的叠加
如果Camera1和Camera2拍摄的物体各自在摄像机视野内,如果在同一个屏幕上把2件物体都显示出来? 1,Camera1的Depth设置为-1 2,Camera2的Depth设置为0,同时Clea ...
- Unity 导入的模型检测不到碰撞
解决方案 添加Mesh Collider和rigidbody,并且Collider里边2个勾要勾上. 这是我碰到的问题.如果没解决你的问题,别打我,逃~