MongoDB Native Node.js Driver

写在前面

最近读《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数据库,并添加文档了,这对于一个大二的前端开发小伙伴来说是兴奋地,以至于半夜不睡觉发神经扰民- -

 1 var mongodb = require(‘mongodb‘);
 2
 3 var server = new mongodb.Server(‘localhost‘, 27017, {auto_reconnect: true});
 4 var db = new mongodb.Db(‘exampleDb‘, server);
 5
 6 db.open(function (err, db) {
 7     if (!err) {
 8         db.collection(‘widgets‘, function (err, collection) {
 9             //删除exampleDb数据库widgets集合中的数据
10             collection.remove(null, {safe: true}, function (err, result) {
11                 if (!err) {
12                     console.log(‘result of remove‘ + result);
13                     //创建两条数据
14                     var widget1 = {id: 1, title: ‘First Great widget‘, desc: ‘greatest widget of all‘, price: 14.99};
15                     var widget2 = {
16                         id: 2,
17                         title: ‘Second Great widget‘,
18                         desc: ‘second greatest widget of all‘,
19                         price: 29.99
20                     };
21                     collection.insert(widget1);
22                     collection.insert(widget2, {safe: true}, function (err, result) {
23                         if (err) {
24                             console.log(err)
25                         } else {
26                             collection.find().toArray(function (err, docs) {
27                                 console.log(docs);
28                                 //关闭数据库
29                                 db.close();
30                             });
31                         }
32                     })
33                 }
34             })
35         })
36     }
37 });

进入到项目文件,我们通过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

 1 var mongodb = require(‘mongodb‘);
 2
 3 var server = new mongodb.Server(‘localhost‘, 27017, {auto_reconnect: true});
 4 var db = new mongodb.Db(‘exampleDb‘, server);
 5
 6 db.open(function (err, db) {
 7     if (!err) {
 8         db.collection(‘widgets‘, function (err, collection) {
 9             //更新数据
10             collection.update({id: 2}, {$set: {title: "Super Bad Widget"}}, {safe: true}, function (err, result) {
11                 if (err) {
12                     console.log(err)
13                 } else {
14                     console.log(result);
15                     //查询更新数据库
16                     collection.findOne({id: 2}, function (err, doc) {
17                         if (!err) {
18                             console.log(doc);
19                             //关闭数据库
20                             db.close();
21                         }
22                     })
23                 }
24             })
25         })
26     }
27 });

更新后的数据库已经改变

写在后面

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

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

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

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

时间: 2024-07-29 04:11:20

MongoDB Native Node.js Driver的相关文章

MongoDB Node.js driver

Node.js连接MongoDB的简单实例 安装Node.js driver npm install mongodb -save 连接 var MongodbClient = require('mongodb').MongoClient; var url = 'mongodb://localhost:27017/microblog'; //your db host MongodbClient.connect(url, function (err, db) { console.log("Conne

MongoDB for node.js developers 七周学习-最终测试小结(1)

MonogoDB官网上提供了许多免费课程,就选择了"MongoDB for node.js developers"学习.课程当然是英文的啦,不过有中文字幕~,每次课程后还有练习.七周的课程过去的很快,学到了不少的内容.借助着最终测试的题,做一次小结,省得自己不久后忘记(哎,记性差= =) 最后的测试一共有十道题,考察的内容分别是:1.查询 2.聚合 3.更新$addToSet 4.更新$inc 5.索引  6.添加优化 7.游标 8.副本 9.片键 10.索引的explain属性 1.

深入Angular JS高级实战教程(涵盖MongoDB/XAMPP/Node.js)下载

转一播放码,需要少许费用,联系QQ:380539674 本系列课程共分为3部分:第一部分学习开发工具WebStorm的使用:第二部分学习AngularJS的核心API使用:包括模块化.控制器.模板和数据绑定.过滤器.指令.服务.路由.表单与验证.服务器通信.测试和项目实战:第三部分是高级部分,主要学习动画.Angular-UI扩展.移动开发.国际化.安全性.开发工作流.在学习过程中会穿插加入PHP.Node.js.MongoDB等后端技术的学习. 下载地址:http://pan.baidu.co

mongodb、node.js 安装

1.官网下载mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.msi安装包 2.安装到D:\database\mongoDB(新建此目录文件夹) 3.到bin文件夹下,看到mongod.exe命令后,或者把环境变量配置下,不用每次都要在dos里切换到此文件目录下 4.作为服务进行安装 --dbpath是指定数据库存放目录,这里要注意有两个 "-" 将mongodb安装为windows服务非常简单只需要在上面执行的命令行后添加 --instal

获得 MongoDB for Node.js Developers 证书

前段时间由于项目需要,开始学习MongoDB,发现MongoDB官网的学习课程非常有帮助. 整个教学很有体系,包括: Video.quiz.Homework.Final Exam. 历时7周,拿到认证证书的一刻还是有些小激动的. 推荐给想学 NoSql(特别是MongoDB)的朋友们,晒一下我的课程内容:

Node.js开发入门——MongoDB与Mongoose

为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像.如果你在Node.js里访问MongoDB的数据,会有我们是一家人的感觉,特别亲切. 我也准备使用MongoDB来作为我的数据库. MongoDB使用集合(collection)和文档(document)来描述和存储数据,collection就相当

基于Node.js平台mongoDB开发——mongoskin(by vczero)

一.废话 从13年1月份接触mongodb进行开发,开发了旅游标签服务.微博标签检索系统.地图服务.web APP服务...使用MongoDB的场景从.NET.JAVA环境转到了node.js平台.越发觉Node.js和mongodb结合感觉的很好.感觉mongodb和node.js是天生的一对.的确,mongodb的客户端是JS的解析引擎.因此,选择mongodb和node.js做产品原型也是很nice的选择.网上,遇到网友询问mongodb的开发,选择哪个driver最好,以前一直是使用原生

[转载]Node.JS平台上的数据库Redis,MongoDB,HBASE,MySQL

一. MongoDB: 因为10gen是的赞助商之一,所以MongoDB有着良好的Node.JS支持. a. 基本支持:,在Node.JS对MongoDB的支持有两种常用的组件mongodb, mongoose.下面分别介绍. (1)基于mongodb的支持.这个for Node.JS的驱动是基于事件驱动的,所以用法基本上都是异步回调函方式.下载驱动组件$npm install -gd mongodb 在testdb.js加入如下代码: var mongodb = require('mongod

使用Backbone.js, ExpressJS, node.js, MongoDB的web应用样板工程

这是web应用的一个完整的样板工程,用到了Backbone.js & Marionette, node.js & ExpressJS,MongoDB & Moogoose, Handlebars, Grunt.js, Bower和Browserify! 我建立了一个超级基础的单页面应用程序(SPA),就是一个简单的通讯录管理器, 但麻雀虽小,五脏俱全.我写这篇文章的目的是介绍一下这个应用所用到的整个技术栈:后端,数据,前端,工具和测试.主要包括下面这些技术: 后端: node.js