Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose
是 NodeJS 的驱动,不能作为其他语言的驱动。
Mongoose 有两个特点
1、通过关系型数据库的思想来设计非关系型数据库
2、基于 mongodb 驱动,简化操作
// 1. 安装 npm install mongoose --save
// 2. 引入并连接数据库
const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/demo");
// 如果有账户密码
//mongoose.connect("mongodb://user:[email protected]:27017/demo");
// userNewUrlParser这个属性会是被验证用户所需的db,
// mongoose.connect("",{userNewUrlParser:true});
// 3. 定义schema
/*数据库中的 Schema,为数据库对象的集合。
schema 是 mongoose 里会用到的一种数据模式,
可以理解为表结构的定义;
每个 schema 会映射到 mongodb 中的一个 collection,
它不具备 操作数据库的能力*/
let StudentSchema = mongoose.Schema({
stuid: String,
stuname: String,
stuage: Number,
stusex: String
// stusex :{type: String,default:1} // 可以指定默认参数
});
// 4.创建数据模型
//mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名称)
let Student = mongoose.model('Student',StudentSchema,"student");
//5. 增加数据
// 实例化模型
// let s = new Student({
// stuid: "20210001",
// stuname: "张三",
// stuage: 23,
// stusex: "男"
// });
// s.save(function(err){
// if(err){
// console.log(err);
// return;
// }
// console.log("增加数据成功");
// });
// 6.修改数据
// Student.updateOne(
// {"stuid":"20210001"}, // 条件
// {"stuname":"小明"} , // 更改的内容
// (err)=>{
// if(err){
// console.log(err);
// return;
// }
// console.log("修改数据成功");
// }
// );
//7 .查找数据
// Student.find(
// {}, //条件
// (err,result)=>{
// if(err){
// console.log(err);
// return;
// }
// console.log(result);
// }
// );
// 8.删除数据
Student.deleteOne(
{"stuid" : "20210001"}, // 条件
(err)=>{
if(err){
console.log(err);
return;
}
console.log("删除数据成功");
}
);
var UserSchema=mongoose.Schema(
{
name:{
type:String,
trim:true // 去除左右空格
},
age:Number,
status:{ type:Number, default:1 } })
set可以用,get不建议使用
set(建议使用) 修饰符在增加数据的 时候对数据进行格式化
var NewsSchema=mongoose.Schema({
title:"string",
author:String,
pic:String,
redirect:{
type:String,
// 对url进行处理,没有http的加上去
set(url){
if(!url)
return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url; }return url;
}
},
content:String,
status:{ type:Number, default:1 }
})
var DeviceSchema = new mongoose.Schema({
sn: {
type: Number, // 唯一索引
unique: true
},
name: {
type: String, // 普通索引
index: true
}
});
var mongoose=require('./db.js');
var UserSchema=mongoose.Schema({
name:{
type:String
},
age:Number,
status:{
type:Number,
default:1
}
})
// 静态方法
UserSchema.statics.findByUid=function(uid,cb){
this.find(
{"_id":uid},
function(err,docs){
cb(err,docs)
})
}
// 实例方法
UserSchema.methods.print = function(){
console.log('这是一个实例方法');
console.log(this);
};
module.exports=mongoose.model('User',UserSchema,'user');
required : 表示这个数据必须传入
max: 用于 Number 类型数据,最大值
min: 用于 Number 类型数据,最小值
enum:枚举类型,要求数据必须满足枚举值
enum: [‘0’, ‘1’, ‘2’]
match:增加的数据必须符合 match(正则)的规则
maxlength:最大值
minlength:最小值
var UserSchema = new mongoose.Schema(
{ name:{
type:String,
required: true,
},
age: {
type: Number,
// 是否必须的校验器
required: true,
// 数字类型的最大值校验器
max: 120,
// 数字类型的最小值校验器
min: 0
},status: {
type: String,
// 设置字符串的可选值
enum: ['0', '1', '2']
},phone:{
type:Number,
match: /^\d{11}$/
},desc: {
type: String,
maxlength:20,
minlength:10 }
});
var UserSchema = new mongoose.Schema({
name:{
type:String,
required: true,
},age: {
type: Number,
// 是否必须的校验器
required: true,
// 数字类型的最大值校验器
max: 120,
// 数字类型的最小值校验器
min: 0
},status: {
type: String,
// 设置字符串的可选值
enum: ['0', '1', '2']
},phone:{
type:Number,
match: /^\d{11}$/
},desc: {
type: String,
// 自定义的验证器,如果通过验证返回 true,没有通过则返回 false
validate: function(desc) {
return desc.length >= 10;
}
}
});
管道操作符 Description
$project 增加、删除、重命名字段
$match 条件匹配。只满足条件的文档才能进入下 一阶段
$limit 限制结果的数量
$skip 跳过文档的数量
$sort 条件排序。
$group 条件组合结果 统计
$lookup $lookup 操作符 用以引入其它集合的数据 (表关联查询)
SQL 和 NOSQL 对比***
WHERE $match
GROUP BY $group
HAVING $match
SELECT $project
ORDER BY $sort
LIMIT $limit
SUM() $sum
COUNT() $sum
join $lookup
管道表达式***
管道操作符作为“键”,所对应的“值”叫做管道表达式。
例如{KaTeX parse error: Expected 'EOF', got '}' at position 19: …ch:{status:"A"}}̲,match 称为管道操作符,而 status:"A"称为管道表达式,是管道操作符的操作数(Operand)。
每个管道表达式是一个文档结构,它是由字段名、字段值、和一些表达式操作符组成的。
常用表达式操作符 Description
$addToSet 将文档指定字段的值去重
$max 文档指定字段的最大值
$min 文档指定字段的最小值
$sum 文档指定字段求和
$avg 文档指定字段求平均
$gt 大于给定值
$lt 小于给定值
$eq 等于给定值