写在前面

最近读《node.js学习指南》,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用

           

一本非常好的介绍node.js的书,我一直把他放在触手可及的地方。  --Mike Amundsen

MongoDB Native Node.js Driver模块是mongodb自带的node的驱动,这个驱动发出的mongodb指令和mongodb客户端发出的指令基本一致。

准备开始- -

  1、首先我们应该确保我们的mongodb数据库本地安装可以正常运行,如果安装过程到遇到了问题可以简单参考我的上一篇博客(window下mongodb的配置与安装

  2、然后我们需要新建一个项目<nodeLearn> mkdir nodeLearn ,创建一个app.js文件作为项目启动文件。

  3、然后我们需要在项目文件中安装MongoDB Native Node.js Driver: npm install mongodb  

  4、开始

1)引入模块,使用mongodb驱动,创建mongodb.Server对象来建立数据库的连接:

var mongodb = require('mongodb')  

var server = new mongodb.Server('localhost',27017,{auto_reconnect:true })

注:Server构造函数的前两个参数分别是localhost和27017默认端口,第三个参数可选,选项被设置为true,表示如果连接断开driver会自动进行重连(还有一个参数pollSize,决定并发的TCP连接数量,我还没有接触到= =)。

2)使用mongodb.Db对象创建数据库

var db = new mongodb.Db('mydb',server)

注:第二个参数表示建立已经连接好的Mongodb server

Mongodb Collection

在MongoDB中并没有表的概念,我们需要一个集合.

1、在数据库中创建一个collection集合对象

db.createCollection('mycollection',function(err,collection){ })
db.collection('mycollection',function(err,collection){ })

注:使用create和不使用有一些区别,使用create表示立即创建,如果对一个已经存在的collection使用createcollection方法,也可以直接访问该collection-driver,并不会覆盖。不使用create并没有创建实际的collection.

2、在数据库中彻底销毁一个collection

db.dropCollection('mycollection',function(err,result){ })

为collection添加数据

  在添加数据之前,我们要知道node mongodb driver 与mongodb数据类型存在一种映射关系(但是对于数据转换背后的处理机制我还不是理解的很清楚,这里为之后的一篇博客做伏笔- -)

  添加数据:

   1、先用remove方法删除已有的collection文档以防止创建失败,

   2、使用insert方法插入数据(接受三个参数,safe模式,keepGoing【插入失败是否继续执行】、serializeFunctions【是否序列化】)

到这里我们已经可以连接到我们的mongodb数据库,并添加文档了,这对于一个大二的前端开发小伙伴来说是兴奋地,以至于半夜不睡觉发神经扰民- -

 var mongodb = require('mongodb');

 var server = new mongodb.Server('localhost', 27017, {auto_reconnect: true});
var db = new mongodb.Db('exampleDb', server); db.open(function (err, db) {
if (!err) {
db.collection('widgets', function (err, collection) {
//删除exampleDb数据库widgets集合中的数据
collection.remove(null, {safe: true}, function (err, result) {
if (!err) {
console.log('result of remove' + result);
//创建两条数据
var widget1 = {id: 1, title: 'First Great widget', desc: 'greatest widget of all', price: 14.99};
var widget2 = {
id: 2,
title: 'Second Great widget',
desc: 'second greatest widget of all',
price: 29.99
};
collection.insert(widget1);
collection.insert(widget2, {safe: true}, function (err, result) {
if (err) {
console.log(err)
} else {
collection.find().toArray(function (err, docs) {
console.log(docs);
//关闭数据库
db.close();
});
}
})
}
})
})
}
});

进入到项目文件,我们通过node命令启动app服务: node app ,

当然你如果你想避免每次修改之后通过node命令重启服务的繁琐,可以使用supervisor,通过 npm install supervisor -g 安装在全局中,使用supervisor命令代替node,这样修改文件之后,不需要每次通过node命令重启服务

那么我们在命令行看下结果吧- -

    

然后我们在mongodb数据库中看下数据结果:(如果你已经配置好了mongo的环境变量,以管理员身份打开cmd,通过mongo命令启动mongodb)

    

会看到数据库widgets文档中也加入了我们想要的两条数据,

如果批量处理文档数据,我们需要尽可能的设置keepGoing为true。

实现查询数据

对于MongoDB Native Node.js Driver来说有四种查询数据的方法:find()、findOne()、findAndRemove()、findAndModify()

findOne()和find()支持以下三个参数:查询数据、可选参数、回调函数 。(对于可选参数和回调函数都是可选项、而且这两种选项的可选值非常多,但是大部分查询只会用到一小部分的选项值)

常用的 sort(文档排序,-1倒排序,1正排序)、

    Field(查询语句并返回field)、

    Skip(skip n个文档,用于跳页)

    Hint(告诉数据库使用特定的索引)

    returnKey(只返回索引的key)

    Comment(为查询在log日志文件中添加描述)

    showDiscLoc(显示结果在磁盘中的位置)...

这些选项值我们同样可以在mongo下使用,进行数据的一些操作

1、接下来我们来用find()查询并返回我们数据库的内容,可以直接使用toArray()方法将结果转化为数组

2、使用可选值field来进行筛选,{fields:{ type=0 }} 设置为0来查询除type之外的字段,为1相反

collection.find({type="A"},{fields:{type=0}}).toArray(function(err,docs){
if(err){
console.log(err)
}else{
console.log(docs); //关闭数据库链接
db.close();
}
})

我们来找到所有type为A,并且返回这条数据(不含type字段)。但是需要注意的一点是,我们设置为1,也并不是只出现type字段,系统生成的唯一标识符也就是_id总是会出现在查询结果中

更新、删除文档

修改、删除文档的方法:更新文档:update()   或者是upserts(如果不存在就添加文档),删除文档remove()、查找并修改或者删除一个文档findAndModify()、查找并删除一个文档findAndRemove()

update/remove和后两个方法之间最本质的区别就在于后者两个方法都返回了被操作的文档

使用$set修改符代替field,$set修改符使只会修改作为属性传递给修改器的field

 var mongodb = require('mongodb');

 var server = new mongodb.Server('localhost', 27017, {auto_reconnect: true});
var db = new mongodb.Db('exampleDb', server); db.open(function (err, db) {
if (!err) {
db.collection('widgets', function (err, collection) {
//更新数据
collection.update({id: 2}, {$set: {title: "Super Bad Widget"}}, {safe: true}, function (err, result) {
if (err) {
console.log(err)
} else {
console.log(result);
//查询更新数据库
collection.findOne({id: 2}, function (err, doc) {
if (!err) {
console.log(doc);
//关闭数据库
db.close();
}
})
}
})
})
}
});

更新后的数据库已经改变

写在后面

使用MongoDB Native Node.js Driver模块,驱动的指令基本上和mongodb客户端是一致的,如果你跟我一样对原始的驱动模块感兴趣,那么这个nodeJS Driver官网一定可以帮到你。

虽然原始驱动提供了数据库的连接,但是缺少更高级别的抽象,有些繁琐,所以有时候你需要使用类似mongoose的ODM,

mongoose构建在mongodb之上,提供了Schema、Model和Document对象,用起来更为方便。

下一次我会总结一下使用express + mongoose建立数据库的连接

MongoDB Native Node.js Driver的更多相关文章

  1. MongoDB Node.js driver

    Node.js连接MongoDB的简单实例 安装Node.js driver npm install mongodb -save 连接 var MongodbClient = require('mon ...

  2. mongodb shell和Node.js driver使用基础

    开始: Mongo Shell 安装后,输入mongo进入控制台: //所有帮助 > help //数据库的方法 > db.help() > db.stats() //当前数据库的状 ...

  3. mongodb & vue & node.js

    mongodb mongodb & vue & node.js https://docs.mongodb.com/manual/tutorial/install-mongodb-on- ...

  4. 2.MongoDB 基于node.js访问和操作集合

    对于频繁使用的Node.js来说,常见的任务是集合的动态操控. 较大的安装给每个大客户一个单独的集合,以便客户登入或离开时.根据需要添加或删除集合. MongoDB Node.js 驱动程序 Db和C ...

  5. windows下安装mongodb以及node.js连接mongodb

    一.MongoDB 下载 下载地址  https://www.mongodb.com/download-center#community  选择windows版下载,然后安装. 二.安装完毕后创建数据 ...

  6. MongoDB 搭建Node.js开发环境

    理解Mongoose Elegant MongoDB object modeling for Node.js   安装Mongoose   $ cnpm install --save mongoose ...

  7. 获得 MongoDB for Node.js Developers 证书

    前段时间由于项目需要,开始学习MongoDB,发现MongoDB官网的学习课程非常有帮助. 整个教学很有体系,包括: Video.quiz.Homework.Final Exam. 历时7周,拿到认证 ...

  8. mongodb原生node驱动

    写在前面 最近读<node.js学习指南>,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用       一本非常好的 ...

  9. Node.js开发——MongoDB与Mongoose

    为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改 ...

随机推荐

  1. Druid 详细介绍

    文章来自阿里巴巴 Druid是一个JDBC组件,它包括三部分:  DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可 ...

  2. ES6关于Unicode的相关扩展

    前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS中的字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列.在过去,16位足以包含任 ...

  3. Spring定时器实现(二)

    Spring结合quarzt可以实现更复杂的定时器,现做简单介绍相关配置: <?xml version="1.0" encoding="UTF-8"?&g ...

  4. IDEA+Java:Selenium+Maven+TestNG基本WebUI自动化测试环境搭建

    IDEA+java:Selenium+Maven+TestNG 本文介绍的测试环境,应该是最基本的测试环境了,也是很多文章都有写,这里做一个完整的图文配置整理,方便阅读理解! 使用maven的好处,由 ...

  5. Go语言学习笔记(五)文件操作

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Cr ...

  6. Opencv探索之路(二十):制作一个简易手动图像配准工具

    近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...

  7. windows系统查看支持最大内存

    1.使用快捷键:win+r打开命令窗口. 按回车到命令界面 2.弹出如下命令界面,在界面C:\Users\Administrator>处输入wmic memphysical get maxcap ...

  8. jsp元素

    1.指令元素:用于在JSP转换为Servlet阶段提供JSP页面的相关信息,如页面采用的字符编码集.页面中需要导入的类等信息,指令元素不会产生任何的输出到当前JSP的输出流中 指令元素有三种指令:pa ...

  9. Python零基础学习系列之二--Python介绍及环境搭建

    1-1.Python简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像P ...

  10. 自定义Git之配置别名

    有没有经常敲错命令?比如git status?status这个单词真心不好记. 如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的. 我们只需要敲一行命令,告 ...