- 可以为文档创建一个模式结构 (Schema)
- 可以对模型种的对象/文档进行验证
- 数据可以通过类型转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的 MongoDB 驱动更容易
02 mongoose中的新对象
-
Schema(模式对象)
- Schema对象定义约束了数据库中的文档结构
-
Model
- Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection
-
Document
- Document表示集合中的具体文档,相当于集合中的一个具体的文档
03实例
/*
1.下载安装mongoose
npm i mongoose --save
2.引入数据库
var mongoose = require("mongoose");
3.连接数据库
mongoose.connect("mongodb://localhost/test",{useMongoClient:true});
mongoose.connect("mongodb://数据库的ip:端口号/数据库名",{useMongoClient:true})
新版中{useMongoClient:true}不用再写了
端口号默认是27017则可以省略
4.监听数据库连接状态
在mongoose对象中,有一个属性是connection,该对象表示的就是数据库连接
通过监视该对象的状态,可以来监听数据库的连接与断开
数据库连接成功的事件
mongoose.connection.once("open",fn);
数据库断开的事件
mongoose.connection.once("close",fn);
5.断开数据库连接
mongoose.disconnect();
*/
复制代码
04 Schema
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test",{useMongoClient:true});
mongoose.connection.once("open",function(){
console.log("数据库连接成功!");
})
//创建约束模式
//将mongooose.Schema赋值给一个变量
var Schema = mongoose.Schema;
//创建Schema(模式)对象
var stuSchema = new Schema({
name:String;
age:Number;
gender:{
type:String,
default:"female"
},
address:String;
})
//创建model,代指集合
//通过Schema来创建Model
// Model代表的是数据库中的集合,通过Model才能对数据库进行操作
// mongoose.model(modelName,Schema)
// modelName 就是要映射的集合名
var stuModel = mongoose.model("students",stuSchema);
//创建文档
// stuModel.create(doc,fn(err){})
stuModel.create({
name:"胡志武",
age:21,
address:"广州"
},function(err){
if(!err){
console.log("创建文档成功")
}
})
复制代码
05 Model
有了Model,我们就可以来对数据库进行增删改查的操作了
-
Model.create(doc(s),[callback])- 用来创建一个文档或多个文档并添加到数据库中
-
参数
- doc(s)可以是一个文档对象,也可以是一个文档对象的数组
- callback
查询
-
Model.find(conditions,[projection],[options],[callback])- 查询符合条件的文档
- 总会返回一个数组
-
Model.findOne([conditions],[projection],[options],[callback])- 查询符合条件的第一个文档
- 返回第一个具体的文档对象
-
Model.findById(id,[projection],[options],[callback])- 根据文档的id属性查询文档
conditions 查询的条件
projection 投影 需要获取的字段,
-
两种方式:
- {name:1,id:0}
- "name -id"
options 查询选项(skip limit)
callback 回调函数,查询结果会通过回调函数返回
stuModel.find({name:"胡志武"},function(err,docs){
if(!err){
console.log(docs);
}
})
stuModel.find({},"name -id",function(err,docs){
if(!err){
console.log(docs);
}
})
stuModel.find({},"name -id",{skip:3},function(err,docs){
if(!err){
console.log(docs);
}
})
复制代码
修改
Model.update(conditions,doc,[options],[callback])
Model.updateOne(conditions,doc,[options],[callback])
Model.updateMany(conditions,doc,[options],[callback])
- 用来修改一个或多个文档
-
参数
- conditions 查询条件
- doc 修改后的对象
- options 配置参数
- callback 回调函数
stuModel.update({name:"胡志武"},{$set:{age:20}},function(err){
if(!err){
console.log("修改成功");
}
})
复制代码
删除
Model.remove(conditions,[callback]);
Model.deleteOne(conditions,[callback]);
Model.delete(conditions,[callback]);
Model.remove({name:"胡志武"},function(err){
console.log("删除成功!");
})
复制代码
文档的数量
Model.count(conditions,[callback])
stuModel.count({age:18},function(err,count){
console.log(count);
})
复制代码
06 Document
Document 和 集合中的文档一一对应,Document是Model的实例
通过Model查询到结果都是Document
创建一个Document
var stu = new StuModel({
name:"奔波霸",
age:48,
gender:"male",
address"碧波谭"
})
// 此时还没有插入数据库中
/*
document的方法
Model#save([option],[callback])
*/
stu.save(function(err){
console.log("保存成功")
})
/*
doc.update(update,[options],[callback] )
- 修改对象
doc.remove([callback])
- 删除文档
doc.get(name)===doc[name]
doc.set(name,value)===doc[name]=value
doc._id
doc.toObject 转化为JS对象
转化为js对象才能删除其中一个属性
但转化后document的方法都不能使用了
*/
复制代码
07 Mongoose关联表的操作
分两步走:
1.建立约束模型式,指定关联字段
var mongoose = require("mongoose")
var Schema = mongoose.Schema;
var article = new Schema({
//关联字段 - 内容分类的id
category: {
//类型
type: mongoose.Schema.Types.ObjectId,
//引用
ref: 'Category'//数据库中集合的名字
},
})
复制代码
ref表示要关联的集合名字,type表示通过ObjectId关联该集合
2.关联查询表时,使用populate
Query.populate(path, [select], [model], [match],[options]) 复制代码
path:你要查询的集合名
model:类型Model,指定要关联字段的model,没有指定的话,就会使用ref指定的
match:查询条件
options:查询参数,如limit,skip等
实例
content.findOne()
.populate({path:['user','catagory']})
.exec(function(err,data){
})
复制代码
08Mongoose支持Promise,避免回调地狱
content.find()
.count()
.then(function(data){
return content.find().skip(data/2).limit(10)
}).then(function(data){
console.log(data)
})
复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithm Analysis in Java
Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99
Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!