mongoDB笔记(二)

关于mongoose

相关概念:

1
2
3
Schema  :  一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力,他的存在相当于Mysql里面的表的字段设计。
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对,相当于对表的操作
Entity : 由Model创建的实体,他的操作也会影响数据库,相当于对查询出的结果组成的数据集合。

关系

Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。

mongoose初步使用

用mongoose连接数据库

连接用的代码:

1
2
3
4
5
6
var mongoose = require('mongoose');
var db = mongoose.connection;
var conn = mongoose.connect('mongodb://que01:<youhost>:<youport>/learn');

var schema = new mongoose.Schema({ name: 'string', age: 'number' });
var User = mongoose.model('user', schema);

这里需要说明的是,schema规定了数据的类型,实际上它也可以规定数据的范围。但是这里需要注意的这里不需要指定数据字的字段大小(field sizes),mongoDB设定的最大大小是16MB,基本上够你放下几部长篇小说了。

查找数据

在express里面实践一番,设定一个路由:

1
2
3
4
5
6
7
8
9
10
11
router.get('/user', function(req, res, next) {
User.find().exec(function(err,users){
res.json({
code:200,
msg:"success",
data:{
users:users
}
});
})
});

结果如图:
find

保存数据

同上,设定路由和相关逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
router.get('/saveUser', function(req, res, next) {
var user = {
name:req.query.name,
age:req.query.age
};

new User(user).save(function (err) {
var user;
if(!err){
user = {
code:200,
msg:"success"
};
}else{
user={
code:200,
msg:"fail"
};
}
res.json(user);
});

如图:
save
重新访问 /user,结果添加了一条,保存成功:
savesuccess

更新数据

这里就不写详细逻辑了,仅仅用get请求传个age数字回来,更改wangwu的age值:
这里用到了findOneAndUpdate方法,其实也就是对 Entity进行操作————因为毕竟改动的是一条数据

1
2
3
4
5
6
router.get('/updateUser', function(req, res, next) {
var user = {
age:req.query.age
};
User.findOneAndUpdate({name:"wangwu"}, {age:user.age}, callback)
});

恩,接下来开始传值,浏览器直接输入 http://localhost:3000/updateUser?age=25,然后访问http://localhost:3000/user,结果如图:

删除操作

删除操作使用remove:

1
2
3
4
5
6
7
8
router.get('/deleteUser', function(req, res, next) {
var user = {
name:req.query.name
};
User.remove({ name: user.name }, function (err) {
if (err) return handleError(err);
});
});

访问http://localhost:3000/deleteUser?name=wangwu,然后然后访问http://localhost:3000/user,如果不报错,可以看到wangwu的记录已经被删除了。