开发者社区> 范大脚脚> 正文

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}}

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7043354.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Node.js使用mongodb操作MongoDB数据库
Node.js使用mongodb操作MongoDB数据库
28 0
Node.js使用mongodb操作MongoDB数据库
Node.js使用mongodb操作MongoDB数据库
21 0
MongoDB 入门教程系列之一:开发环境搭建以及 Node.js 和 Java 的读写访问(二)
MongoDB 是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,采取面向文档的分布式设计思路,具有强大的可扩展性,表结构自由,并且支持丰富的查询语句和数据类型。时至今日,MongoDB 以其灵活的数据存储方式,逐渐成为 IT 行业非常流行的一种非关系型数据库解决方案。
91 0
MongoDB 入门教程系列之一:开发环境搭建以及 Node.js 和 Java 的读写访问(一)
MongoDB 是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,采取面向文档的分布式设计思路,具有强大的可扩展性,表结构自由,并且支持丰富的查询语句和数据类型。时至今日,MongoDB 以其灵活的数据存储方式,逐渐成为 IT 行业非常流行的一种非关系型数据库解决方案。
95 0
Node.js使用mongodb.js操作MongoDB数据库
Node.js使用mongodb.js操作MongoDB数据库
38 0
node.js操作MongoDB数据
node.js操作MongoDB数据
76 0
使用Node.js、MongoDB、Fastify 构建API服务
在现代WEB开发中,数据交互是主要需求,那么对于前后端数据交互来说,REST API 就是其中的数据交互设计的一种,如何设计 REST API ? 对 API 体验至关重要,API 设计的好坏直接影响开发效率,这里就不详细展开介绍,如对 API 设计有兴趣可以参阅专栏《布道API》。
250 0
Node.js+Express+mongoDB 实现邮箱注册
前言 很多网站都会有用户注册这一个功能模块,其中大多数网站都会让用户填写手机号,然后通过手机验证码来实现用户的注册。但是大家都知道手机验证码都会收取一定的费用,所以有一些网站可能资金不够,但是又想尽大可能的留住用户,所以他们就采用使用邮箱验证码的方式来进行注册。
195 0
Node.js使用mongodb操作MongoDB数据库
Node.js使用mongodb操作MongoDB数据库
186 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-4.使用axios,并创建接口上传数据到mongodb数据库
根据我的业务范围,设想网站内容分为三类,设计、开发、小程序,设计中有二级分类平面设计、UI设计,平面设计又有三级分类包括VI设计、名片设计、LOGO设计…之后网站发布的不管是文章还是合作订单,全部归属到这些类别中,这样就需要用到数据的关联。
296 0
Node.js 使用 MongoDB 的 ObjectId 作为查询条件
当往MongoDB中插入一条数据时,会自动生成ObjectId作为数据的主键。那么如何通过ObjectId来做数据的唯一查询呢? 在MongoDB中插入一条数据 在MongoDB中插入一条如下结构的数据: { _id: 5d6a32389c825e24106624e4, title: 'GitHub 上有什么好玩的项目', content: '上个月有水友私信问我,GitHub 上有没有比较好玩的项目可以推荐?我跟他说:"有,过两天我整理一下"。
1813 0
Java和Node.js实战 MongoDB 4.x 新特性:Change Streams 变化流
MongoDB 4.0 Change Streams增强新特性,我们可以跟踪单个集合Colletion、数据库或部署集群的数据库和集合中的所有变化。
2405 0
+关注
范大脚脚
文章
问答
视频
相关电子书
更多
沪江基于Node.js大规模应用实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多