为了保存网站的用户数据和业务数据,通常需要一个数据库。MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。如果你在Node.js里访问MongoDB的数据,会有我们是一家人的感觉,特别亲切。
我也准备使用MongoDB来作为我的数据库。
MongoDB使用集合(collection)和文档(document)来描述和存储数据,collection就相当于表,document相当于行,不过MySQL之类的关系型数据库,表结构是固定的,比如某一行由若干列组成,行行都一样,而MongoDB不同,一个集合里的多个文档可以有不同的结构,更灵活一些。
安装Mongo
详细指南在这里(MongoDB的官方文档):https://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/。
到https:///isaacs/npm.gitcd npmnode cli.js install npm -gf
在执行这段代码之前,请确保node.exe是跟通过node.msi的方式安装的,或者在PATH环境变量中。这段命令也会将npm加入到PATH环境变量中去,之后可以随处执行npm命令。如果安装中遇到权限方面的错误,请确保cmd命令行工具是通过管理员身份运行的。安装成功后,执行以下命令:
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
如此,Windows平台下的NPM安装完毕,然后我们可以安装mongoose
npm install mongoose
实例
一些基础的操作,说明都写在代码注释里了:
// mongoose 链接var mongoose = require('mongoose');var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); // 链接错误db.on('error', function(error) { console.log(error);});// Schema 结构var mongooseSchema = new mongoose.Schema({ username : {type : String, default : '匿名用户'}, title : {type : String}, content : {type : String}, time : {type : Date, default: Date.now}, age : {type : Number}});// 添加 mongoose 实例方法mongooseSchema.methods.findbyusername = function(username, callback) { return this.model('mongoose').find({username: username}, callback);}// 添加 mongoose 静态方法,静态方法在Model层就能使用mongooseSchema.statics.findbytitle = function(title, callback) { return this.model('mongoose').find({title: title}, callback);}// modelvar mongooseModel = db.model('mongoose', mongooseSchema);// 增加记录 基于 entity 操作var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'};var mongooseEntity = new mongooseModel(doc);mongooseEntity.save(function(error) { if(error) { console.log(error); } else { console.log('saved OK!'); } // 关闭数据库链接 db.close();});// 增加记录 基于model操作var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'};mongooseModel.create(doc, function(error){ if(error) { console.log(error); } else { console.log('save ok'); } // 关闭数据库链接 db.close();});// 修改记录mongooseModel.update(conditions, update, options, callback);var conditions = {username : 'model_demo_username'};var update = {$set : {age : 27, title : 'model_demo_title_update'}};var options = {upsert : true};mongooseModel.update(conditions, update, options, function(error){ if(error) { console.log(error); } else { console.log('update ok!'); } //关闭数据库链接 db.close();});// 查询// 基于实例方法的查询var mongooseEntity = new mongooseModel({});mongooseEntity.findbyusername('model_demo_username', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //关闭数据库链接 db.close();});// 基于静态方法的查询mongooseModel.findbytitle('emtity_demo_title', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //关闭数据库链接 db.close();});// mongoose findvar criteria = {title : 'emtity_demo_title'}; // 查询条件var fields = {title : 1, content : 1, time : 1}; // 待返回的字段var options = {};mongooseModel.find(criteria, fields, options, function(error, result){ if(error) { console.log(error); } else { console.log(result); } //关闭数据库链接 db.close();});// 删除记录var conditions = {username: 'emtity_demo_username'};mongooseModel.remove(conditions, function(error){ if(error) { console.log(error); } else { console.log('delete ok!'); } //关闭数据库链接 db.close();});