前言第一篇mongoDB入门系列二:node中的增删改查,讲解了如何使用node驱动来增删改查数据。本文将继续往前推进,依然通过增删改查查询来讲解如何使用mongoose更流畅的控制MongoDB。什么是MongooseMongoose是一个Node模块。为在node.js中操作mongoDB提供了更高效的解决方案。它提供了一个MongoDB集合的接口,以及一些有用的功能,例如架构层次结构、中间件和数据验证。模式定义首先,您需要安装mongoose。安装mongoose的命令如下:npminstallmongoose。同时记得开启mongoDB服务。在Mongoose中,一切都由Schema驱动。在下面的程序中,我们定义了一个Tasks,可以理解为这个Tasks对应了mongoDB中的一组任务。该集合有两个属性,一个是project,类型是string,一个是description,类型也是string。varmongoose=require('mongoose')mongoose.connect('mongodb://localhost:27017/demodb')vardb=mongoose.connection;db.on('error',function(error){console.log(错误);});//模式定义varTasks=newmongoose.Schema({project:{type:String,default:'defaulttask'},description:String});mongoose.model('任务',任务);添加//addvarTask=mongoose.model('Task');vartask=newTask();task.description='task1description.';task.save(function(err){if(err)throwerr;console.log('Tasksaved.')})如果数据库demodb中没有tasks集合,执行上述程序时,会自动创建tasks集合。执行程序后,我们发现数据库中的tasks集合多了一行数据:如果我们不小心将task.description的值赋给了数字123,那么程序还能正常执行吗?当然,mongoose会自动帮我们把数字123转换成字符串123。最后的结果是这样的:delete可以使用文档的内部ID来获取和删除文档,代码如下://deletevarTask=mongoose.model('Task')Task.findById('5b56ce3c2fa17f02e459fe54',function(err,task){task.remove()})当然也可以使用其他条件删除,代码如下:varTask=mongoose.model('Task')Task.findOne({'description':'12'},function(err,task){task.remove()})更改以下代码以使用Mongoose更新文档id为5b5bebbfbf04e70bd432bde1varTask=mongoose.model('Task');Task.update({_id:'5b5bebbfbf04e70bd432bde1'},{description:'更新描述'},{multi:false},function(err,rows_updated){if(err)throwerr;console.log('更新。');})当然你也可以使用mongoose的find方法定位一个文档,然后修改保存。检查以下代码,搜索任务集合,并输出每个任务的唯一ID和描述,打印完成后关闭数据库连接。varTask=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权威指南(第二版)MongoDB实战(第二版)
