【Mongodb】增删改查

Mongodb介绍

  • Mongodb是基于分布式文件存储的数据库
  • 数据库是按照数据结构来组织,存储和管理数据的应用程序
  • 数据库的主要作用就是管理数据,进行增删改查
  • Mongodb语法与js类似,容易上手

Mongodb核心概念

数据库
  • 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中存放很多集合
集合
  • 集合类似js中的数组,在集合中存放很多文档
文档
  • 文档是数据库的最小单位
  • 也就是对象里面的字段也叫文档
    在这里插入图片描述

安装Mongodb

在这里插入图片描述

运行地址

在这里插入图片描述

步骤1
  • bin目录下cmd,mongod
步骤2(新起一个cmd)
  • bin目录下cmd,mongo
    在这里插入图片描述
  • 这样表明建立链接
  • 此时此刻,mongo命令行和mongodb交互
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

命令行交互

数据库命令
  • 显示所有的数据库
show dbs
  • 切换到指定的数据库,如果不存在会自动创建
use 数据库名
  • 显示当前所在的数据库
db
  • 删除当前数据库
use 库名
db.dropDatabase()
集合命令
  • 创建集合
db createCollection('users')
  • 显示当前所在的数据库的所有集合
show collections
  • 删除某个集合
db.集合名.drop()
  • 重命名某个集合
db.集合名.renameCollection('新集合名')
文档命令
  • 插入文档
db.集合名.insert('文档对象')
  • 查询文档
db.集合名.find('查询条件')
  • 更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'李四'},{$set:{age:19}})
//$set很重要
  • 删除文档
db.集合名.remove(查询条件)

Mongoose

  • 是一个对象文档模型库
  • 作用是方便使用代码操作mongodb数据库
  • 官网
    在这里插入图片描述
// 1.安装mongoose
// 2.导入mongoose
const mongoose = require('mongoose');
//设置strictQuery为true,消除警告
mongoose.set('strictQuery', true);
// 3.连接mongodb服务
mongoose.connect('mongodb://127.0.0.1:27017/lusheng');

// 4,设置成功/错误/关闭回调,once一次,事件只执行一次,on是会再次执行
mongoose.connection.once('open', () => {
  console.log('服务连接成功');
  // 关闭mongodb链接;
  // mongoose.disconnect();
});
mongoose.connection.on('error', () => {
  console.log('服务连接失败');
});
mongoose.connection.on('close', () => {
  console.log('服务连接终止');
});

设置运行命令
 "scripts": {
    "mongoose": "node mongoose.js"
  },
npm run mongoose

字段类型

在这里插入图片描述

字段值验证
  • unique必须重建集合才生效
    在这里插入图片描述
// 4,设置成功/错误/关闭回调,once一次,事件只执行一次,on是会再次执行
mongoose.connection.once('open', () => {
  console.log('服务连接成功');
  // 5,创建文档的结构对象
  //设置集合中文档的属性以及属性值的类型
  let UserSchema = new mongoose.Schema({
    name: {
      type:String,
      required:true, //表明该属性 不能为空
      unique:true //设置唯一值,不能重复
    },
    auther: {
      type:String,
      default:'匿名' //设置默认值
    },
    price: {
      type:Number,
      enum:[0,1] //设置的值必须是数组中的
    },
    isvip: Boolean,
    list: Array,
    createtime: Date,
  });
  // 6,创建模型对象。对文档操作的封装对象,参数一是集合对象,参数2是结构对象
  let UserModel = new mongoose.model('userInfo', UserSchema);

  //7,新增
  UserModel.create({
    // name: '用户1',
    auther: '乞力马扎罗',
    price: 99,
    isvip: true,
    list: [1, 2, 3, 4, 5, 6],
    createtime: new Date(),
  })
    .then((data) => {
      console.log(data,"正确");
    })
    .catch((err) => {
      console.log(err,"错误");
    });
  // 关闭mongodb链接;
  // mongoose.disconnect();
});
mongoose.connection.on('error', () => {
  console.log('服务连接失败');
});
mongoose.connection.on('close', () => {
  console.log('服务连接终止');
});

Mongoose新增文档

// 4,设置成功/错误/关闭回调,once一次,事件只执行一次,on是会再次执行
mongoose.connection.once('open', () => {
  console.log('服务连接成功');
  // 5,创建文档的结构对象
  //设置集合中文档的属性以及属性值的类型
  let UserSchema = new mongoose.Schema({
    name: String,
    auther: String,
    price: Number,
    isvip: Boolean,
    list: Array,
    createtime: Date,
  });
  // 6,创建模型对象。对文档操作的封装对象,参数一是集合对象,参数2是结构对象
  let UserModel = new mongoose.model('userInfo', UserSchema);

  //7,新增
  UserModel.create({
    name: '用户1',
    auther: '乞力马扎罗',
    price: 99,
    isvip: true,
    list: [1, 2, 3, 4, 5, 6],
    createtime: new Date(),
  })
    .then((data) => {
      console.log(data);
    })
    .catch((err) => {
      console.log(err);
    });
  // 关闭mongodb链接;
  // mongoose.disconnect();
});
mongoose.connection.on('error', () => {
  console.log('服务连接失败');
});
mongoose.connection.on('close', () => {
  console.log('服务连接终止');
});

Mongoose删除文档

  • 新版只支持.then.catch方式获取回调函数
  • 单条删除
 // 删除单条文档
 UserModel.deleteOne({_id:'66136481cd016b90b634f712'}).then((user) => {
    // 你的逻辑
    console.log(user);
  })
  .catch((error) => {
    // 错误处理
  });
  • 批量删除
  UserModel.deleteMany({name:'用户1'})
    .then((user) => {
      // 你的逻辑
      console.log(user)
    })
    .catch((error) => {
      // 错误处理
    });

Mongoose更新文档

  • 更新单条文档
	//参数一,条件,参数二,内容,参数三,回调方法
 UserModel.updateOne({ name: '乞力马扎罗1' },{$set:{name: '乞力马扎罗'}})
  .then((user) => {
    // 你的逻辑
    console.log(user)
  })
  .catch((error) => {
    // 错误处理
  });
  • 更新多条文档
  // 使用updateMany方法更新多个文档
  UserModel.updateMany({ name: '乞力马扎罗1' }, {$set:{name: '乞力马扎罗'}})
    .then((result) => {
      // result包含了更新的文档数量等信息
      console.log(result);
    })
    .catch((error) => {
      // 错误处理
      console.error(error);
    });

Mongoose读取文档

  • 通过条件进行查找
UserModel.findOne({ name: '乞力马扎罗1' })
    .then((user) => {
      // 你的逻辑
      console.log(user)
    })
    .catch((error) => {
      // 错误处理
    });
  • 通过id进行查找
//通过id进行查找
  UserModel.findById('6613649acd016b90b634f714')
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });
  • 批量查找
UserModel.find({name:'乞力马扎罗1'})
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });
  • 查找所有
UserModel.find()
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });

条件控制

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

  UserModel.find({age:{$lt:19}})
  .then((user) => {
    // 你的逻辑
    console.log(user);
  })
  .catch((error) => {
    // 错误处理
  });

个性化读取

字段筛选
  • select
  • 目前的查询时返回该文档的全部信息
  • 字段筛选可以返回文档中的特定信息
  • 1代表要,0代表不要
 UserModel.find()
    .select({ name: 1, age: 1, _id: 0 })
    .exec()
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });

在这里插入图片描述

数据排序
  • sort 排序
  • 1升序
  • -1倒序
  • 案例:按照年龄升序
UserModel.find()
    .select({ name: 1, age: 1, _id: 0 })
    .sort({ age: 1 })
    .exec()
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });
数据截取
  • skip(),跳过几个
  • limit().截取几个
  • 将年龄最大的截取出来
 UserModel.find()
    .select({ name: 1, age: 1, _id: 0 })
    .sort({ age: 1 })
    .limit(1)
    .exec()
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });

在这里插入图片描述

  • 示例:将年龄第二大的截取出来
UserModel.find()
    .select({ name: 1, age: 1, _id: 0 })
    .sort({ age: 1 })
    .skip(1)
    .limit(1)
    .exec()
    .then((user) => {
      // 你的逻辑
      console.log(user);
    })
    .catch((error) => {
      // 错误处理
    });
  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值