mongoDB初阶系列三:mongoose
前言
上篇 mongoDB初阶系列二:node中的增删改查 中讲解了用node驱动来对数据进行增删改查,本篇将继续前进,依旧通过增删改查来讲解如何用mongoose更顺畅的操控MongoDB。
什么是Mongoose
Mongoose是一个Node模块。提供了一种更高效的在node中操作mongoDB的方案。它提供了一个到MongoDB集合的接口,以及一些实用的功能,比如schema层次结构,中间件以及数据校验。
schema定义
首先,需要安装mongoose,安装mongoose的命令如下:npm install mongoose
,同时,记得开启mongoDB服务。
在Mongoose中,一切都被Schema所驱动。在下面程序中,我们定义了一个Tasks,你可以理解为,这个Tasks对应在mongoDB中是一个tasks集合。该集合有两个属性,一个是project,类型为string,另一个是description,类型也是string。
var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/demodb') var db = mongoose.connection; db.on('error', function(error) { console.log(error); }); // schema定义 var Tasks = new mongoose.Schema({ project: {type : String, default : '默认任务'}, description: String }); mongoose.model('Task', Tasks);
增
// add var Task = mongoose.model('Task'); var task = new Task(); task.description = 'task1 description.'; task.save(function(err) { if (err) throw err; console.log('Task saved.') })
如果数据库demodb中没有tasks这个集合,当上面程序执行时,会自动创建tasks集合,当执行该程序后,我们发现数据库中tasks集合多了一行数据:
如果我们不小心把task.description的值赋予了数字123,那么程序能正常执行吗?
当然,mongoose会帮我们自动将数字123转换成字符串123。最后结果会是这样:
删
可以用文档的内部ID获取和删除文档,代码如下:
// 删除 var Task = mongoose.model('Task') Task.findById('5b56ce3c2fa17f02e459fe54', function(err, task) { task.remove() })
当然,你可以用其他条件来进行删除,代码如下:
var Task = mongoose.model('Task') Task.findOne({ 'description': '12' }, function(err, task) { task.remove() })
改
下面的代码用Mongoose更新了一个文档id为5b5bebbfbf04e70bd432bde1的文档
var Task = mongoose.model('Task'); Task.update( {_id: '5b5bebbfbf04e70bd432bde1'}, {description: 'update description.'}, {multi: false}, function(err, rows_updated) { if (err) throw err; console.log('Updated.'); } )
当然你也可以用mongoose的find方法定位一个文档,然后修改并保存它。
查
下面这段代码对tasks集合进行搜索,并输出每项任务的唯一ID和描述,等打印完成后,关闭数据库连接。
var Task = mongoose.model('Task'); Task.find((err, tasks) => { console.log(tasks) if (tasks != null) { tasks.map(v => { console.log('ID:' + v._id); console.log(v.description); }) } db.close() });
当然,查询方法有很多,这里只是列举其一。
可视化工具推荐
顺便提一下,可以使用mongoDB官方推出的compass工具来查看和操作数据(包括增删改查),对于测试和调试数据来说,非常的方便。
小结
觉得自己是操控mongoDB的高手了吗?也许还不是,但读完本系列的初阶三部曲,相信你应该已经掌握了很多基础知识,如果你决定深入使用Mongoose,请参考它的在线文档 http://mongoosejs.com/docs/in...
到这里为止,mongoDB初阶系列将告一段落,同时,推荐如下书籍供需要深入理解mongoDB的朋友继续参考:
MongoDB权威指南(第2版)
MongoDB实战(第二版)