一、Mongoose安装及使用
1.安装
npm i mongoose --save
2.定义schema
数据库中的schema,为数据库对象的集合,schema是mongoose会用到的一种数据模式,可以理解为表结构的定义:每个schema会映射到mongodb中的一个collection。他不具备操作数据库的能力
3.增删改查
const mongoose=require("mongoose")
// 建立连接
mongoose.connect("mongodb://shop2:admin888@127.0.0.1:27017/app")
// 操作user表
// 定义一个schema 里面的对象和数据库表里面的字段需要一一对应
var c1Schema=mongoose.Schema({
name:String,
age:Number,
// Status:Number
})
// 创建数据模型
// var c1=mongoose.model("c1",c1Schema)
var c1=mongoose.model("c1",c1Schema,"c1") //默认会操作第三个参数配置的c1表的(集合)
// 查询数据
// c1.find({},function(err,doc){
// if(err){
// console.log(err);
// return
// }
// console.log(doc)
// })
// -----增加数据
// 实例化Model
// var u=new c1({
// name:"李四",
// age:20,
// status:1
// });
// u.save(function(err){
// if(err){
// console.log(err);
// return
// }
// console.log("增加成功")
// })
// ----更新数据
// c1.updateOne({name:"李四"},{name:"张三"},function(err,res){
// if(err){
// console.log(err);
// return
// }
// console.log("成功")
// })
// 删除数据
c1.deleteOne({name:"张三"},function(err){
if(err){
console.log(err);
return
}
console.log("删除成功")
})
二、预定义模式修饰符 Getters 与 Setters自定义修饰符
1.预定义模式修饰符
lowercase、uppercase、trim
mongoose提供的预定义模式修饰符,可以对增加的数据进行一些格式化
var UserSchema=mongoose.Schema({
name:{
type:String,
trim:true //会给name字段去掉左右空格
},
age:Number,
status:{
type:Number,
default:1
}
})
2.自定义修饰符
redirect可以对数据库中的网址进行处理
var mongoose = require("./db")
var FocusSchema = mongoose.Schema({
title: {
type: String,
trim: true //定义模式修饰符去掉空格
},
pic: String,
redirect: {
type: String,
set(parmas) { //增加数据的时候对redirect字段进行处理
// parmas 可以获取redirect的值,返回的字段就是redirect在数据库中实际保存的值
/*
www.baidu.com
http://www.baidu.com
*/
if (!parmas) {
return " "
} else {
if (parmas.indexOf("http://") != 0 && parmas.indexOf("https://") != 0) {
return "http://" + parmas
}
return parmas
}
}
},
status: {
type: Number,
default: 1
}
})
module.exports = mongoose.model("Focus", FocusSchema, "focus")
set一般对我们格式进行处理,get一般不用
三、索引,内置方法,
1.索引
2.内置CURD
http://mongoosejs.com/docs/queries.html
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()
3.静态方法和实例方法
//
var mongoose = require("./db")
var UserSchema = mongoose.Schema({
name: {
type: String,
},
sn: {
type: String,
index: true
},
age: Number,
status: {
type: Number,
default: 1 //默认参数,可以让数据库没有的属性增加到数据库里
}
})
// 静态方法
UserSchema.statics.findByname = function (name, cb) {
// 通过find方法获取sn的数据
// this关键词获取当前的model
this.find({ "name": name }, function (err, docs) {
cb(err, docs)
})
}
// UserModel = mongoose.model("User", UserSchema, "user")
// module.exports=UserModel
module.exports = mongoose.model("User", UserSchema, "user")
//----------------------------------------
//==========================================
var UserModel = require("./model/user2")
var user = new UserModel({
name: "张飒",
sn: "123232e34",
age: 17,
status: 1
});
user.save()
UserModel.findByname("李四", function (err, data){
if (err) {
console.log(err);
return
}
console.log(data)
})
四、数据校验
1.内置数据校验
- 如果schema没有设置该属性,增加的时候是不会把没有的列添加进去的
- 如果增加的字段没有schema定义的,也是可以的添加进去的
required: 表示这个数据必须传入max: 用于number类型数据
min: 用于number类型数据,最小值
enum:
match:增加的数据必须符合match(正则)的规则
// match:/^sn(.*)/i
maxlength:最大值
minlength: 最小值
2.自定义验证器
五、aggregate聚合管道
关联查询
- $project:选择对应一个字段
$match: 条件
- $group:分组
主要功能:是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。
数组列存放的数据是来自被Join 集合的适配文档,如果没有,集合为空(即 为[ ])
基本语法:
{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
参数说明:
(1)from:同一个数据库下等待被Join的集合。
(2)localField: 源集合中的match值,如果输入的集合中,某文档没有localField,这个Key(Field),在处理的过程中,会默认为此文档含有 localField:null的键值对。
(3)foreignField:待Join的集合的match值,如果待Join的集合中,文档没有foreignField值,在处理的过程中,会默认为此文档含有
foreignField:null的键值对。
(4)as:为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉。
- $sort:排序
- $limit:限制查询几条数据
- $skip:跳过多少数据
- $lookup:做表关联
六、populate实现关联查询
//注意使用populate需要用到的model
// ArticleModel.find({}).populate("cid").exec(function(err,data){
// console.log(data);
// })
ArticleModel.find({}). populate("cid").populate("author_id").exec(function (err, data) {
console.log(data);
})
@TOC
一、Mongoose安装及使用
1.安装
npm i mongoose --save
2.定义schema
数据库中的schema,为数据库对象的集合,schema是mongoose会用到的一种数据模式,可以理解为表结构的定义:每个schema会映射到mongodb中的一个collection。他不具备操作数据库的能力
3.增删改查
const mongoose=require("mongoose")
// 建立连接
mongoose.connect("mongodb://shop2:admin888@127.0.0.1:27017/app")
// 操作user表
// 定义一个schema 里面的对象和数据库表里面的字段需要一一对应
var c1Schema=mongoose.Schema({
name:String,
age:Number,
// Status:Number
})
// 创建数据模型
// var c1=mongoose.model("c1",c1Schema)
var c1=mongoose.model("c1",c1Schema,"c1") //默认会操作第三个参数配置的c1表的(集合)
// 查询数据
// c1.find({},function(err,doc){
// if(err){
// console.log(err);
// return
// }
// console.log(doc)
// })
// -----增加数据
// 实例化Model
// var u=new c1({
// name:"李四",
// age:20,
// status:1
// });
// u.save(function(err){
// if(err){
// console.log(err);
// return
// }
// console.log("增加成功")
// })
// ----更新数据
// c1.updateOne({name:"李四"},{name:"张三"},function(err,res){
// if(err){
// console.log(err);
// return
// }
// console.log("成功")
// })
// 删除数据
c1.deleteOne({name:"张三"},function(err){
if(err){
console.log(err);
return
}
console.log("删除成功")
})
二、预定义模式修饰符 Getters 与 Setters自定义修饰符
1.预定义模式修饰符
lowercase、uppercase、trim
mongoose提供的预定义模式修饰符,可以对增加的数据进行一些格式化
var UserSchema=mongoose.Schema({
name:{
type:String,
trim:true //会给name字段去掉左右空格
},
age:Number,
status:{
type:Number,
default:1
}
})
2.自定义修饰符
redirect可以对数据库中的网址进行处理
var mongoose = require("./db")
var FocusSchema = mongoose.Schema({
title: {
type: String,
trim: true //定义模式修饰符去掉空格
},
pic: String,
redirect: {
type: String,
set(parmas) { //增加数据的时候对redirect字段进行处理
// parmas 可以获取redirect的值,返回的字段就是redirect在数据库中实际保存的值
/*
www.baidu.com
http://www.baidu.com
*/
if (!parmas) {
return " "
} else {
if (parmas.indexOf("http://") != 0 && parmas.indexOf("https://") != 0) {
return "http://" + parmas
}
return parmas
}
}
},
status: {
type: Number,
default: 1
}
})
module.exports = mongoose.model("Focus", FocusSchema, "focus")
set一般对我们格式进行处理,get一般不用
三、索引,内置方法,
1.索引
2.内置CURD
http://mongoosejs.com/docs/queries.html
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()
3.静态方法和实例方法
//
var mongoose = require("./db")
var UserSchema = mongoose.Schema({
name: {
type: String,
},
sn: {
type: String,
index: true
},
age: Number,
status: {
type: Number,
default: 1 //默认参数,可以让数据库没有的属性增加到数据库里
}
})
// 静态方法
UserSchema.statics.findByname = function (name, cb) {
// 通过find方法获取sn的数据
// this关键词获取当前的model
this.find({ "name": name }, function (err, docs) {
cb(err, docs)
})
}
// UserModel = mongoose.model("User", UserSchema, "user")
// module.exports=UserModel
module.exports = mongoose.model("User", UserSchema, "user")
//----------------------------------------
//==========================================
var UserModel = require("./model/user2")
var user = new UserModel({
name: "张飒",
sn: "123232e34",
age: 17,
status: 1
});
user.save()
UserModel.findByname("李四", function (err, data){
if (err) {
console.log(err);
return
}
console.log(data)
})
四、数据校验
1.内置数据校验
- 如果schema没有设置该属性,增加的时候是不会把没有的列添加进去的
- 如果增加的字段没有schema定义的,也是可以的添加进去的
required: 表示这个数据必须传入max: 用于number类型数据
min: 用于number类型数据,最小值
enum:
match:增加的数据必须符合match(正则)的规则
// match:/^sn(.*)/i
maxlength:最大值
minlength: 最小值
2.自定义验证器
五、aggregate聚合管道
关联查询
- $project:选择对应一个字段
$match: 条件
- $group:分组
主要功能:是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。
数组列存放的数据是来自被Join 集合的适配文档,如果没有,集合为空(即 为[ ])
基本语法:
{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
参数说明:
(1)from:同一个数据库下等待被Join的集合。
(2)localField: 源集合中的match值,如果输入的集合中,某文档没有localField,这个Key(Field),在处理的过程中,会默认为此文档含有 localField:null的键值对。
(3)foreignField:待Join的集合的match值,如果待Join的集合中,文档没有foreignField值,在处理的过程中,会默认为此文档含有
foreignField:null的键值对。
(4)as:为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉。
- $sort:排序
- $limit:限制查询几条数据
- $skip:跳过多少数据
- $lookup:做表关联
六、populate实现关联查询
//注意使用populate需要用到的model
// ArticleModel.find({}).populate("cid").exec(function(err,data){
// console.log(data);
// })
ArticleModel.find({}). populate("cid").populate("author_id").exec(function (err, data) {
console.log(data);
})
@TOC
一、Mongoose安装及使用
1.安装
npm i mongoose --save
2.定义schema
数据库中的schema,为数据库对象的集合,schema是mongoose会用到的一种数据模式,可以理解为表结构的定义:每个schema会映射到mongodb中的一个collection。他不具备操作数据库的能力
3.增删改查
const mongoose=require("mongoose")
// 建立连接
mongoose.connect("mongodb://shop2:admin888@127.0.0.1:27017/app")
// 操作user表
// 定义一个schema 里面的对象和数据库表里面的字段需要一一对应
var c1Schema=mongoose.Schema({
name:String,
age:Number,
// Status:Number
})
// 创建数据模型
// var c1=mongoose.model("c1",c1Schema)
var c1=mongoose.model("c1",c1Schema,"c1") //默认会操作第三个参数配置的c1表的(集合)
// 查询数据
// c1.find({},function(err,doc){
// if(err){
// console.log(err);
// return
// }
// console.log(doc)
// })
// -----增加数据
// 实例化Model
// var u=new c1({
// name:"李四",
// age:20,
// status:1
// });
// u.save(function(err){
// if(err){
// console.log(err);
// return
// }
// console.log("增加成功")
// })
// ----更新数据
// c1.updateOne({name:"李四"},{name:"张三"},function(err,res){
// if(err){
// console.log(err);
// return
// }
// console.log("成功")
// })
// 删除数据
c1.deleteOne({name:"张三"},function(err){
if(err){
console.log(err);
return
}
console.log("删除成功")
})
二、预定义模式修饰符 Getters 与 Setters自定义修饰符
1.预定义模式修饰符
lowercase、uppercase、trim
mongoose提供的预定义模式修饰符,可以对增加的数据进行一些格式化
var UserSchema=mongoose.Schema({
name:{
type:String,
trim:true //会给name字段去掉左右空格
},
age:Number,
status:{
type:Number,
default:1
}
})
2.自定义修饰符
redirect可以对数据库中的网址进行处理
var mongoose = require("./db")
var FocusSchema = mongoose.Schema({
title: {
type: String,
trim: true //定义模式修饰符去掉空格
},
pic: String,
redirect: {
type: String,
set(parmas) { //增加数据的时候对redirect字段进行处理
// parmas 可以获取redirect的值,返回的字段就是redirect在数据库中实际保存的值
/*
www.baidu.com
http://www.baidu.com
*/
if (!parmas) {
return " "
} else {
if (parmas.indexOf("http://") != 0 && parmas.indexOf("https://") != 0) {
return "http://" + parmas
}
return parmas
}
}
},
status: {
type: Number,
default: 1
}
})
module.exports = mongoose.model("Focus", FocusSchema, "focus")
set一般对我们格式进行处理,get一般不用
三、索引,内置方法,
1.索引
2.内置CURD
http://mongoosejs.com/docs/queries.html
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()
3.静态方法和实例方法
//
var mongoose = require("./db")
var UserSchema = mongoose.Schema({
name: {
type: String,
},
sn: {
type: String,
index: true
},
age: Number,
status: {
type: Number,
default: 1 //默认参数,可以让数据库没有的属性增加到数据库里
}
})
// 静态方法
UserSchema.statics.findByname = function (name, cb) {
// 通过find方法获取sn的数据
// this关键词获取当前的model
this.find({ "name": name }, function (err, docs) {
cb(err, docs)
})
}
// UserModel = mongoose.model("User", UserSchema, "user")
// module.exports=UserModel
module.exports = mongoose.model("User", UserSchema, "user")
//----------------------------------------
//==========================================
var UserModel = require("./model/user2")
var user = new UserModel({
name: "张飒",
sn: "123232e34",
age: 17,
status: 1
});
user.save()
UserModel.findByname("李四", function (err, data){
if (err) {
console.log(err);
return
}
console.log(data)
})
四、数据校验
1.内置数据校验
- 如果schema没有设置该属性,增加的时候是不会把没有的列添加进去的
- 如果增加的字段没有schema定义的,也是可以的添加进去的
required: 表示这个数据必须传入max: 用于number类型数据
min: 用于number类型数据,最小值
enum:
match:增加的数据必须符合match(正则)的规则
// match:/^sn(.*)/i
maxlength:最大值
minlength: 最小值
2.自定义验证器
五、aggregate聚合管道
关联查询
- $project:选择对应一个字段
$match: 条件
- $group:分组
主要功能:是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。
数组列存放的数据是来自被Join 集合的适配文档,如果没有,集合为空(即 为[ ])
基本语法:
{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
参数说明:
(1)from:同一个数据库下等待被Join的集合。
(2)localField: 源集合中的match值,如果输入的集合中,某文档没有localField,这个Key(Field),在处理的过程中,会默认为此文档含有 localField:null的键值对。
(3)foreignField:待Join的集合的match值,如果待Join的集合中,文档没有foreignField值,在处理的过程中,会默认为此文档含有
foreignField:null的键值对。
(4)as:为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉。
- $sort:排序
- $limit:限制查询几条数据
- $skip:跳过多少数据
- $lookup:做表关联
六、populate实现关联查询
//注意使用populate需要用到的model
// ArticleModel.find({}).populate("cid").exec(function(err,data){
// console.log(data);
// })
ArticleModel.find({}). populate("cid").populate("author_id").exec(function (err, data) {
console.log(data);
})