博客搭建(三) mongoose

Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具

mongoose安装

1
npm install mongoose

安装成功后,就可以通过 require(‘mongoose’) 来使用!

简介

https://mongoosejs.com/docs/index.html

建立链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var mongoose = require('mongoose'),
DB_URL = 'mongodb://localhost:27017/mongoosesample';

/**
* 连接
*/
mongoose.connect(DB_URL);

/**
* 连接成功
*/
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
//操作
});

/**
* 连接异常
*/
mongoose.connection.on('error',function (err) {
console.log('Mongoose connection error: ' + err);
});

/**
* 连接断开
*/
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected');
});

Schema

  c是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力

​ 对于mongoose一切都源于mongoose

  🌰, 定义一个user的Schema并生成model导出:

1
2
3
4
5
6
7
8
var mongoose = require('./db.js'),
Schema = mongoose.Schema;

var UserSchema = new Schema({
username : { type: String }, //用户账号
userpwd: {type: String}, //密码
userage: {type: Number}, //年龄
});

Schema Types内置类型如下:

​ String , Number , Boolean | Bool , Array , Buffer , Date , ObjectId | Oid , Mixed

model

mongoose.model(modelName, schema)

1
2
// 用上述Schema生成一个model, 
var User = mongoose.model('User',UserSchema);

model是一个用来创建document的类. 在这种情况下,每个document将具有Schema的属性和行为. 我们可以新建一个user:

1
var user1 = new User({name: '用户1', userpwd:'123456', userage: '22'})

我们可以给Schema添加方法, 从而使所有的model具有相应方法:

1
2
3
4
5
6
7
8
9
10
11
12
UserSchema.methods.getName = function(){
var greeting = this.name
? "My name is " + this.name
: "I don't have a name";
console.log(greeting);
}
// 用Schema生成一个model,
var User = mongoose.model('User',UserSchema);
// 用model生成一个document
var user1 = new User({name: '用户1', userpwd:'123456', userage: '22'})
// document可以调用UserSchema.methods里的方法
user1.getName() // 'My name is 用户1'

到目前为止我们还没有保存任何东西到mongoDB中, 其实每个document都有一个save方法用来将model保存到数据库

1
2
3
4
user1.save(function (err, user1) {
if (err) return console.error(err);
user1.getName();
});

可以通过model查询, 查询所有由他生成的document

1
2
3
4
User.find(function (err, users) {
if (err) return console.error(err);
console.log(users);
})

添加查询条件

1
2
3
4
User.find({ name: /^用户/ }, function (err, users) {
if (err) return console.error(err);
console.log(users);
});