Mongoose_基础操作mongoDB

Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose
是 NodeJS 的驱动,不能作为其他语言的驱动。

安装
npm install mongoose --save
连接数据库
//引入mongoose 
const Mongoose = require('mongoose')

//使用mongoose链接mongoDB数据库
Mongoose.connect("mongodb://localhost:27017/test",{
    useNewUrlParser:true
},function(err){
    if(err){
        console.log(err)
        return 
    }
    console.log("已成功连接数据库!")
})
1.若当前数据库无权限验证则直接链接;
2.若有权限验证那么第一个参数为:"mongodb://用户名:密码@数据库地址/数据库名称"
3.其中connect()方法有三个参数:(url,options,cb)具体参考API
*4.优化:当然其实url,用户名,密码这些可以写作一个配置文件,到时候来读取应该要方便些!

在这里插入图片描述

定义Schema

1.数据库中的 Schema,为数据库对象的集合。schema 是 mongoose 里会用到的一种数据模式,可以理解为表结构的定义;每个 schema 会映射到 mongodb 中的一个 collection,它不具备操作数据库的能力

  • Schema里面的对象和数据库表里面的字段需要一一对应
//schema接收一个对象,里面的参数为数据库中集合(表)的字段
const UserSchema = mongoose.Schema({
	name:String, //name:'string'
	age:Number,
	sex:String
})
  • mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化
//其中每个字段值可以为一个对象,包含对该字段的操作及说明
const UserSchema = mongoose.Schema({
	name:{
		type:String,  //字段类型
		trim:true      //表示入库前对该字段进行trim()除空格,类似的还有lowercase、uppercase
	}, 
	age:{
		type:Number,
		default:0 //该字段的默认值
	},
	sex:{
		type:String,
		set(value){    //Setters 自定义修饰符
			return value=="0"?"男":"女"
		}
	}
})
  • mongoose索引

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更

const UserSchema = mongoose.Schema({
	name:{
		type:String,  //字段类型
		unique:true      // **设置该字段唯一索引
	}, 
	age:{
		type:Number,
		index:true //普通索引
	}
})
  • Schema数据校验
required : 表示这个数据必须传入
max: 用于 Number 类型数据,最大值
min: 用于 Number 类型数据,最小值
enum:枚举类型,要求数据必须满足枚举值 enum: ['0', '1', '2']
match:增加的数据必须符合 match(正则)的规则
maxlength:最大值
minlength:最小值
validate:function(){}:自定义验证
const UserSchema = mongoose.Schema({
	name:{
		type:String,  //字段类型
	}, 
	age:{
		type:Number,
		maxlength:60, //限制年龄这个字段在 18~60之间
		minlength:18
	},
	sex:{
		type:'string',
		validate:function(sex){  //自定义的验证器,如果通过验证返回 true,没有通过则返回 false
			return sex==='女'?true:false
		}
	}
})
生成Model(数据模型)

根据集合(表)字段 ——》 定义Schema ——》生成Model ——》操作数据库

const UserModel = mongoose.model("User",UserSchema,"user")
参数一:model名称(首字母大写)
参数二:定义的Schema
参数三:集合(表)名称
  • 增加操作(其余方法参考API)
//生成Model
const UserModel = Mongoose.model("User",UserSchema,"user")

//增加(实例化模型)
let add = new UserModel({
    name:'caristop3',
    age:24,
    sex:'男'
})
add.save(function(err,docs){  
    if(err){
        console.log('保存出错:'+err)
        return 
    }
    console.log(docs)
})
save()方法有两个参数一个options,一个cb 具体参考API

在这里插入图片描述
在这里插入图片描述

  • 修改操作(其余方法参考API)
//生成Model
const UserModel = Mongoose.model("User",UserSchema,"user")

//2.修改
UserModel.updateOne({"name":"caristop3"},{age:40},function(err,docs){
    if(err){
        console.log('更新出错:'+err)
        return
    }
    console.log(docs)
})

在这里插入图片描述
在这里插入图片描述

  • 删除操作(其余方法参考API)
UserModel.deleteOne({ name: "caristop3" }, function(err, docs) {
  if (err) {
    console.log("更新出错:" + err);
    return;
  }
  console.log(docs);
});

在这里插入图片描述
在这里插入图片描述

  • 查询操作(其余方法参考API)
//生成Model
const UserModel = Mongoose.model("User", UserSchema, "user");

//4.查询
UserModel.find({}, function(err, docs) {
  if (err) {
    console.log("查询出错:" + err);
    return;
  }
  console.log(docs);
});

在这里插入图片描述
在这里插入图片描述

管道操作(aggregate)
  • 常用管道操作符
$project:增加、删除、重命名字段   (SELECT)
$match:条件匹配。只满足条件的文档才能进入下一阶段  (WHERE)
$limit:限制结果的数量  (LIMIT)
$skip:跳过文档的数量  ()
$sort:条件排序  (ORDER BY)
$group:条件组合结果 统计  (GROUP BY)
$lookup:$lookup 操作符 用以引入其它集合的数据 (表关联查询) (join)
  • 常用的管道表达式操作符
$addToSet  将文档指定字段的值去重
$max  文档指定字段的最大值
$min  文档指定字段的最小值
$sum  文档指定字段求和
$avg  文档指定字段求平均
$lg  大于给定值
$lt  小于给定值
$eq  等于给定值
  1. $project
UserModel.aggregate([{
    $project:{
        name:1   //只抽name字段
    }
}], function(err, docs) {
  if (err) {
    console.log("查询出错:" + err);
    return;
  }
  console.log(docs);
});

在这里插入图片描述

  1. $match
UserModel.aggregate(
  [
    {
      $project: {  //抽name,age字段
        name: 1,
        age: 1
      }
    },
    {
      $match: {
        age: { $lt: 18 }  //条件是年龄小于18
      }
    }
  ],
  function(err, docs) {
    if (err) {
      console.log("查询出错:" + err);
      return;
    }
    console.log(docs);
  }
);

在这里插入图片描述
4. $group
5. $sort
6. $limit
7. $skip

UserModel.aggregate(
  [
    {
      $project: {
        name: 1,
        age: 1
      }
    },
    {
      $match: {
        age: { $gt: 18 }
      }
    },
    {
      $sort: {
        age: -1 //倒序
      }
    },
    {
        $limit:2 //只抽2条
    },
    {
        $skip:1 //1到最后
    }
  ],
  function(err, docs) {
    if (err) {
      console.log("查询出错:" + err);
      return;
    }
    console.log(docs);
  }
);
  1. $lookup
两表关联:
UserModel.aggregate(
	[
		$lookup:{
			from:"关联的表",
			localField:"关联字段",
			foreignField:"外键关联字段"
			as:"形成指定字段"
		}
	]
)

三表关联(多个$lookup):
UserModel.aggregate(
	[
		$lookup:{
			from:"关联的表",
			localField:"关联字段",
			foreignField:"外键关联字段"
			as:"形成指定字段"
		},
		$lookup:{
			from:"关联的表",
			localField:"关联字段",
			foreignField:"外键关联字段"
			as:"形成指定字段"
		}
	]
)
  1. populate(关联查询)
需要在Schema定义时指定ref:关联model的名称
Schema({
	name:{
		type:String,
		ref:'所想关联表的model名称'
	}
})
UserModel.find({}).populate("包含ref的那个字段(name)").exec(function(err,docs){})
数据库导入导出
//导出
mongodump -h "数据库地址" -d "导出数据库名称" -o "指定导出文件的位置"

//导入
mongorestore -h "数据库地址" -d "导入数据库名称"  "导入文件的路径"

mongooseAPI地址

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值