Mongoose好处
- 能够为文档建立一个模式结构(Schema) 能够对模型中的对象/文档进行验证
- 数据能够经过类型转换转换为对象模型
- 可使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
Mongoose提供的新对象
– Schema(模式对象) 对象定义约束了数据库中的文档结构 – Model 对象做为集合中的全部文档的表示,至关于MongoDB数据库中的集合collection – Document 表示集合中的具体文档,至关于集合中的一个具体的文档mongodb
下载安装
npm i mongoose --save
基本用法
//引入 var mongoose = require("mongoose"); //链接数据库 mongoose.connect("mongodb://127.0.0.1/mongoose_test" , { useNewUrlParser: true, useUnifiedTopology:true}); mongoose.connection.once("open",function(){ console.log("--> 数据库链接成功"); }); mongoose.connection.once("close",function(){ console.log("--> 数据库链接已经断开"); }); //断开数据库链接 //mongoose.disconnect(); //将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); /* - 有了Model,咱们就能够来对数据库进行增删改查的操做了 Model.create(doc(s), [callback]) - 用来建立一个或多个文档并添加到数据库中 - 参数: doc(s) 能够是一个文档对象,也能够是一个文档对象的数组 callback 当操做完成之后调用的回调函数 查询的: Model.find(conditions, [projection], [options], [callback]) - 查询全部符合条件的文档 总会返回一个数组 Model.findById(id, [projection], [options], [callback]) - 根据文档的id属性查询文档 Model.findOne([conditions], [projection], [options], [callback]) - 查询符合条件的第一个文档 总和返回一个具体的文档对象 conditions 查询的条件 projection 投影 须要获取到的字段 - 两种方式 {name:1,_id:0} "name -_id" options 查询选项(skip limit) {skip:3 , limit:1} callback 回调函数,查询结果会经过回调函数返回 回调函数必须传,若是不传回调函数,压根不会查询 */ //增:StuModel.create(doc, function(err){}); StuModel.create({ name:"张三", age:16, address:"北京" },function (err) { if(!err){ console.log("插入成功"); } }); //查 StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) { if(!err){ console.log(docs); } }); /* 修改 Model.update(conditions, doc, [options], [callback]) Model.updateMany(conditions, doc, [options], [callback]) Model.updateOne(conditions, doc, [options], [callback]) - 用来修改一个或多个文档 - 参数: conditions 查询条件 doc 修改后的对象 options 配置参数 callback 回调函数 Model.replaceOne(conditions, doc, [options], [callback]) * */ StuModel.updateOne({name:"张三"},{$set:{age:20}},function (err) { if(!err){ console.log("修改为功"); } }); /* 删除: Model.remove(conditions, [callback]) Model.deleteOne(conditions, [callback]) Model.deleteMany(conditions, [callback]) */ StuModel.remove({name:"李四"},function (err) { if(!err){ console.log("删除成功"); } }); /* Model.count(conditions, [callback]) - 统计文档的数量的 */ StuModel.count({},function (err , count) { if(!err){ console.log(count); } }); //建立一个Document var stu = new StuModel({ name:"奔波霸", age:48, gender:"male", address:"碧波潭" }); stu.save(function (err) { if(!err){ console.log("保存成功~~~"); } }); StuModel.findOne({},function (err , doc) { if(!err){ /* update(update,[options],[callback]) - 修改对象 remove([callback]) - 删除对象 */ //console.log(doc); /*doc.update({$set:{age:28}},function (err) { if(!err){ console.log("修改为功~~~"); } });*/ /*doc.age = 18; doc.save();*/ /*doc.remove(function (err) { if(!err){ console.log("大师兄再见~~~"); } });*/ /* get(name) - 获取文档中的指定属性值 set(name , value) - 设置文档的指定的属性值 id - 获取文档的_id属性值 toJSON() ****** - 转换为一个JSON对象 toObject() - 将Document对象转换为一个普通的JS对象 转换为普通的js对象之后,注意全部的Document对象的方法或属性都不能使用了 */ //console.log(doc.get("age")); //console.log(doc.age); //doc.set("name","猪小小"); //doc.name = "hahaha"; //console.log(doc._id); //var j = doc.toJSON(); //console.log(j); //var o = doc.toObject(); //console.log(o); doc = doc.toObject(); delete doc.address; console.log(doc._id); } });
建立Schema模式对象
var userSchema = new Schema(definition, option);
- options经常使用选项
• autoIndex 布尔值,开启自动索引,默认true
• bufferCommands 布尔值,缓存因为链接问题没法执行的语句,默认true
• capped 集合中最大文档数量
• collection 指定应用Schema的集合名称
• id 布尔值,是否有应用于_id的id处理器,默认true
• _id 布尔值,是否自动分配id字段,默认true
• strict 布尔值,不符合Schema的对象不会被插入进数据库,默认true - 定义Schema模式对象
- 模式为集合中的文档定义字段和字段类型。
- 对于在模式中的每一个字段,你都须要定一个特定的值类 型。受支持的类型以下:
- String
- Number
- Boolean
- Array
- Buffer
- Date
- ObjectId或Oid
- Mixed
- 须要为每一个不一样的文档类型都定义一个模式
建立Model模型对象
- model(name, [schema], [collection] , [skipInit])
• name参数至关于模型的名字,之后能够同过name找到模型。
• schema是建立好的模式对象。
• collection是要链接的集合名。
• skipInit是否跳过初始化,默认是false - model对象的方法
- remove(conditions, callback)
- deleteOne(conditions, callback)
- deleteMany(conditions, callback)
- find(conditions, projection, options, callback)
- findById(id, projection, options, callback)
- findOne(conditions, projection, options, callback)
- count(conditions, callback)
- create(doc, callback)
- update(conditions, doc, options, callback)
- ...
建立Document文档对象
- document对象的方法
- equals(doc)
- id
- get(path,[type])
- set(path,value,[type])
- update(update,[options],[callback])
- save([callback])
- remove([callback])
- isNew
- isInit(path)
- toJSON()
- toObject()
- ...