Mongoose简介:
Mongoose是一个让我们通过Node来操作MongoDB的模块,Mongoose是一个对象文档模型库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能
Mongoose优点:
1、可以为文档创建一个模式结构
2、可以对模型中的对象/文档进行验证
3、数据可以通过类型转换转换为对象模型
4、可以使用中间件来应用业务逻辑挂钩
5、比Node原生的MongoDB驱动更容易
Mongoose提供的新对象:
- Schema(模式对象)
*Schema对象定义约束了数据库的文档结构
- Model
*Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection
- Document
*Document表示集合中的具体文档,相当于集合中的一个具体的文档
Mongoose操作步骤:
1.下载安装Mongoose
npm i mongoose --save
2.在项目中引入mongoose
var mongoose = require("mongoose");
3.连接MongoDB数据库
mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名')
- 如果端口号是默认端口号(27017)则可以省略不写
4.断开数据库连接(一般不需要调用)
- MongoDB数据库,一般情况下,只需要连接一次,连接一次以后,除非项目停止服务器关闭,否则连接一般不会断开
mongoose.disconnect()
--监听MongoDB数据库的连接状态
- 在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接
通过监视该对象的状态,可以来监听数据库的连接与断开
数据库连接成功的事件:
mongoose.connection.once("open",function(){});
数据库断开的事件:
mongoose.connection.once("close",function(){});
Schema 和 Model:
var mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true}); mongoose.connection.once("open",function () { console.log("数据库连接成功~~~"); });
//将mongoose.Schema赋值给一个变量 var Schema = mongoose.Schema; //创建Schema(模式)对象 var stuSchema = new Schema({ name:String, age:Number, gender:{ type:String, default:"female" //指定性别为女 }, address:String });
//通过Schema来创建Model //Model代表的是数据库的集合,通过Model才能对数据库进行操作 //mongoose.model(modelName , schema): //modelName 就是要映射的集合名mongoose会自动将集合名变成复数 var StuModel = mongoose.model("student", stuSchema);
//向数据库中插入一个文档 //StuModel.create({doc, function(err)}); StuModel.create({ name:"孙悟空", age:18, gender:"male", address: "花果山" },function (err) { if(!err){ console.log("插入成功~~~"); } });
Document:
Document的方法:
get(获取)
set(设置)
save(保存)
update(修改)
remove(删除)
//创建一个Document var stu = new StuModel({ name:"奔波霸", age:28, gender:"male", address: "碧波潭" });
stu.save(function (err) { if(!err){ console.log("保存成功~~~"); } });
StuModel.findOne({},function (err,doc) { if(!err){ /* update(update,[options],[callback]) - 修改对象 save([callback]) - 保存对象 remove([callback]) - 删除对象
get(name)
- 获取文档中的指定属性值
set(name , value)
- 设置文档的指定的属性
id
- 获取文档的_id的属性值
toJson
- 转换为一个JSON对象
toObject()
- 将Document对象转换为一个普通的JS对象
转换为普通的js对象以后,注意所有的Document对象的方法或属性都不能使用
*/
//console.log(doc);
/*
doc.update({$set:{age:28}},
function (err) {
if(!err){
console.log("修改成功~~~");
} });
*/
/*
doc.remote(
function (err) {
if(!err){
console.log("大师兄再见~~~");
} });
*/
//console.log(doc.get("age"));
//console.log(doc.age);
//doc.set("name","猪小小");
//doc.name = "hahaha";
//console.log(doc._id);
//var o = doc.toObject();
//console.log(o);
} });
补充:
定义一个模块,用来连接MongoDB数据库
//mongo.js内容: var mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true}); mongoose.connection.once("open",function () { console.log("数据库连接成功~~~"); });
//index.js内容: require("./tools/mongo"); <直接调用mongo.js里的内容,方便连接上数据库>