使用Mongoose操作MongoDB
Mongoose
是基于node-mongodb-native
开发的MongoDB nodejs
驱动,可以在异步的环境下执行。
关于在Mac下安装和使用MongoDB
可以看我之前的一篇文章:
文章传送门:Mac下安装MongoDB 及使用教程
MongoDB PATH环境变量配置
将mongodb
添加到环境变量中:$ vim ~/.zshrc
,添加如下命令行:
export PATH="$PATH:/usr/local/mongodb/bin"
当然前提是将解压出来的文件移到/usr/local/mongodb
目录中。版本3.0.7
然后就可以在终端直接使用MongoDB
命令,而不用每次都进入MongoDB
所在文件夹的目录啦。
比如,启动MongoDB
,直接在终端输入 $ mongo
就可以启动啦
默认运行在 http://127.0.0.1:27017 。
还可以自定义端口:$ mongod --dbpath=data/db --port=27017
或者输入:$ mongo 127.0.0.1:27017
Mongoose的使用
首先新建一个名为mongo
的文件夹,该文件夹就是数据库目录。然后在该目录下安装mongoose
:
$ npm install mongoose
在该目录下新建一个名为script.js
的文件:
var mongoose = require('mongoose');
var uri = 'mongodb://username:password@hostname:port/databasename';
uri = 'mongodb://localhost/mongo';
mongoose.connect(uri);
//在Schma里定义数据类型
var BookSchma = new mongoose.Schema({ //定义一个Schema
name: String,
author: String,
publishTime:Date
});
mongoose.model('Book',BookSchma);//将该Schema发布为Model
通过Model
我们就可以创建、删除和修改mongodb
里面的文档,MongoDB
为我们提供了Schema
,Schema
则提供了数据类型和结构的定义。
然后在该目录下再新建一个名为insert.js
的文件:
var mongoose = require('mongoose');
require('./script.js');
var Book = mongoose.model('Book');//Book为model name
var book = new Book({
name: 'MEAN Web Development',
author: 'trigkit4',
publishTime: new Date()
});
book.save(function (err) {
console.log('save status:',err ? 'failed' : 'success');
});
打开终端,进入数据库目录(文件夹目录),输入$ node insert.js
,不出意外应该可以看到:
save status: success
find
查询操作,返回结果包含在数组里(单个的请使用findOne()
)
var mongoose = require('mongoose');
require('./script');
var Book = mongoose.model('Book');
/*
find参数:
1.<Object>mongodb selector
2.<Function>err:错误信息,results:查询结果
*/
Book.find({}, function (err,results) {
if(err){
console.log('error message',err);
return;
}
console.log('results',results);
});
$or(array)
和$and(array)
新建一个名为or.js
的文件
var mongoose = require('mongoose');
require('./script');
var Book = mongoose.model('Book');
var condition ={
$or: [
{author: 'trigkit4'},
{author: 'Mike'}
]
};
Book.find(condition, function (err, results) {
if(err){
console.log('condition error',err);
return;
}
console.log('condition',condition,'results',results);
});
终端输入$ node or.js
,不出意外应该能输出:
condition { '$or': [ { author: 'trigkit4' }, { author: 'Mike' } ] }
results [ { __v: 0,
publishTime: Fri Nov 27 2015 22:13:14 GMT+0800 (CST),
author: 'trigkit4',
name: 'MEAN Web Development',
_id: 565864fae48504c03d92f319 } ]
关于Array
Array
在JavaScript
编程语言中并不是数组,而是集合,因此里面可以存入不同的值,以下代码等价:
var Schema1 = new Schema({array:[]});
var Schema2 = new Schema({array:Array});
var Schema3 = new Schema({array:[Schema.Types.Mixed]});
var Schema4 = new Schema({array:[{}]});
在Express中使用Mongoose
首先先安装express-generator
$ npm install express-generator -g
安装好后,在终端执行:
$ express mongooseExpress
用来生成一个express实例。
然后我们在这个mongooseExpress
文件夹下新建一个名为config
的文件夹,然后在config
下新建一个config.js
文件:
module.exports = {
mongodb: 'mongodb://localhost/mongo'
};
在再config
文件夹下新建一个名为mongoose.js
的文件:
var mongoose = require('mongoose');
var config = require('./config');
module.exports = function () {
var db = mongoose.connect(config.mongodb);//连接数据库
return db;//返回数据库实例
};
然后我们再新建一个名为models
的文件夹,然后新建一个名为user.server.model.js
的文件:
var mongoose = require('mongoose');
var UserSchema = new mongoose.Schema({
uid: Number,
username: String,
createTime: Date,
lastLogin: Date
});
mongoose.model('user',UserSchema);
然后在刚才的mongoose.js
中添加如下代码:
require('../models/user.server.model.js');
打开app.js
,添加如下代码:
var mongoose = require('./config/mongoose');
var db = mongoose();
使用Mongoose读取数据
首先打开routes
文件夹下的users.js
文件,添加如下代码:
var mongoose = require('mongoose');
var User = mongoose.model('User');
router.get('/test', function (req, res, next) {
var user = new User({
uid: 123,
username: 'trigkit4'
});
user.save(function (err) {
if(err){
res.end('Error');
return next();
}
//find({})意为返回所有文档
User.find({}, function (err, results) {
if(err){
res.end('Error');
return next();
}
res.json(results);//以json数据类型返回值
})
})
});
最后,打开终端,进入mongooseExpress
目录,执行
$ npm install
将package.json
的依赖安装好后,再执行:
$ npm install mongoose --save
在终端输入cat package.json
,可以看到
{
"name": "mongooseExpress",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.13.2",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"express": "~4.13.1",
"jade": "~1.11.0",
"mongoose": "^4.2.8",
"morgan": "~1.6.1",
"serve-favicon": "~2.3.0"
}
}
可以看到"start": "node ./bin/www"
,因此,启动脚本需要在终端执行
$ node bin/www
然后打开另外一个窗口,输入:
curl localhost:3000/users/test
可以看到node bin/www
那端的窗口显示GET / 200 28.562 ms - 170
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。