大熊君大话NodeJS之------MongoDB模块(额外篇)
一,开篇分析
这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块)。
(1),简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。
MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
(2),特点
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
1)面向集合存储,易存储对象类型的数据。
2)模式自由。
3)支持动态查询。
4)支持完全索引,包含内部对象。
5)支持查询。
6)支持复制和故障恢复。
7)使用高效的二进制数据存储,包括大型对象(如视频等)。
8)自动处理碎片,以支持云计算层次的扩展性。
9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
10)文件存储格式为BSON(一种JSON的扩展)。
11)可通过网络访问。
(3),安装及使用
1,下载并解压 "mongodb" 到指定目录,如下:
2,其中有两个最重要的文件:”Mongod.exe“和”Mongo.exe“ 。
Mongod.exe ------ 用来连接到mongo数据库服务器的,即服务器端。
Mongo.exe ------ 用来启动MongoDB shell的,即客户端。
二,分步骤操作
(1),新建一个目录,例如:”>mongod -dbpath data/db“ 。
(2),打开浏览器输入:“http://127.0.0.1:27017/”,见到如下字样:
"You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number",表示已成功。
到此,MongoDB数据库服务已经成功启动了。
(3),创建数据库------进入CMD,键入命令“mongo.exe” 出现如下界面:
(4),在shell 命令窗口键入如下命令:" use bb" (use 命令用来切换当前数据库,如果该数据库不存在,则会先新建一个)。
(5),在shell 命令窗口键入如下命令:“ db.users.insert({"name":"bigbear","password":"12345678"})”,
(这条命令是向users 集合中插入一条数据,如果集合users不存在,则会先新建一个,然后再插入数据,参数以JSON格式传入)。
(6),在shell 命令窗口键入如下命令:“db.users.find()” (显示users集合下的所有数据文档),如下图:
注意图中的“_id”,系统给每条记录自动分配了一个惟一主键 _id 。
好了!基本的功能够用了,后面如果需要额外的操作逐步补充,由于篇幅有限主要说的是NodeJS操作Mongodb,所以暂时告一段落。
三,进入主题,实例分析
(1),npm install mongodb (下载后放入制定目录下)。
(2),之前我们已经建立好了数据库和集合("bb","users")
var mongodb = require("mongodb") ;
var server = new mongodb.Server("localhost",27017,{
auto_reconnect : true
}) ;
var conn = new mongodb.Db("bb",server,{
safe : true
}) ;
conn.open(function(error,db){
if(error) throw error ;
db.collection("users",{
safe : true
},function(err,collection){
if(err) throw err ;
collection.find().toArray(function(e,docs){
if(e) throw e ;
console.log(docs) ;
}) ;
}) ;
}) ;
运行结果如下:
[
{
_id: 54b3ce920dc20a3ba9607f
name: 'bigbear',
password: '12345678'
}
]
四,总结一下
(1),熟练使用MongoDB数据库。
(2),理解与关系型数据库之间的差异化。
(3),通过上述的例子,掌握NodeJS如何操作MongoDB。
(4),强调一句话:如何设计“NoSQL”类型的数据库,思想很重要。
哈哈哈,本篇结束,未完待续,希望和大家多多交流够沟通,共同进步。。。。。。呼呼呼……(*^__^*)
大熊君大话NodeJS之------MongoDB模块(额外篇)的更多相关文章
- 大熊君大话NodeJS之------Net模块
一,开篇分析 从今天开始,我们来深入具体的模块学习,这篇文章是这个系列(大熊君大话NodeJS)文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中, 对NodeJS也有一个基本的认识,没事 ...
- 大熊君大话NodeJS之------Http模块
一,开篇分析 首先“Http”这个概念大家应该比较熟悉了,它不是基于特定语言的,是一个通用的应用层协议,不同语言有不同的实现细节,但是万变不离其宗,思想是相同的, NodeJS作为一个宿主运行环境,以 ...
- 大熊君大话NodeJS之------Stream模块
一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的un ...
- 大熊君大话NodeJS之------Buffer模块
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- 大熊君大话NodeJS之------Connect中间件模块(第一季)
一,开篇分析 截止到今天来说,NodeJS系列文章已经有将近十篇了,让我们回顾一下: (1),大熊君大话NodeJS之开篇------Why NodeJS(将Javascript进行到底) (2),大 ...
- 大熊君大话NodeJS之 ------ Connect中间件第二季(源码分析)
一,开篇分析 大家好,大熊君又回来了,今天这篇文章主要是对"Connect"中间件以及相关辅助中间件,做一个源码分析系列,我想上一篇文章大家也看了, 介绍了使用方式及用途,而这篇也 ...
- 大熊君大话NodeJS之------FS文件模块
一,开篇分析 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.可以通过调用 require("fs") 来获取该模块.文件系统模块中的所有方法均有异步和同步 ...
- 大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)
一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用 ...
- 大熊君大话NodeJS之开篇------Why NodeJS(将Javascript进行到底)
一,开篇分析 大家好啊,大熊君又来啦(*^__^*) 嘻嘻……,之前我写过一系列关于JS(OOP与设计模式)方面的文章,反响还好,其实这也是对我本人最大的鼓励,于是我决定我要将JavaScript进行 ...
随机推荐
- 附加数据库后无法创建发布,error 2812 解决
日前,由于业务需要,我要把一个数据库直接迁移到新的实例上 用的方法比较古老,就是直接停旧服务器,将数据文件复制到新服务器上,附加数据库 当然这个附加没有什么可说的了,但是在附加后需要将原来库上的发布重 ...
- save(),saveOrUpdate(),merge()的区别
Save save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原因.假如两个实体之间有关系(例如empl ...
- 离散信源的分类和数学模型&&离散无记忆信源的熵
1.离散信源的分类和数学模型 在离散时间发出离散符号的信源称为离散信源.如果信源符号集为有限集,则称为有限离散信源.如果信源符号集为无限可数集,则称为无限离散信源. 离散无记忆信源的N次拓展源:设信源 ...
- python高级之多线程
python高级之多线程 本节内容 线程与进程定义及区别 python全局解释器锁 线程的定义及使用 互斥锁 线程死锁和递归锁 条件变量同步(Condition) 同步条件(Event) 信号量 队列 ...
- 原生js实现jquery库中部分事件的功能(jquery库封装二)
继续昨天的封装,今天的部分继昨天选择器之后实现了css样式的获取和添加,attr的获取和添加和一部分事件的封装:只是我自己的理解,不妥之处欢迎大家在评论中提出,相互学习,共同提高 /** * Crea ...
- 查找数据库中重复的值的数据,having的使用,count(1),sum等聚会函数
通过having代替where来使用count(1),sum()等函数.譬如如下数据id value1 21 32 33 53 6 可以写个语句统计value的分组 在这里,可以省略前面的sum(va ...
- PAT 1038. 统计同成绩学生(20)
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查 ...
- 用CSS正确显示人民币符号的HTML转义字符
做电子商务的难免要跟钱打交道,特别是跟人民币接触更多,但人民币符号长什么样呢,是¥还是¥?糊涂了吧^~^,要知道答案很简单,找出一张新的一百元大钞,在背面看看那个防伪的银线,上面就有. 我们做网页时要 ...
- 在JS方法中返回多个值的三种方法
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...
- 一种全新的屏幕适配方法 自动百分比适配 一切px说了算
看hongyang的博客 发现他的一个按百分比适配的方案 : 库地址https://github.com/hongyangAndroid/AndroidAutoLayout 博客地址http://bl ...