【Mongodb】增删改查

news2025/1/21 3:00:30

Mongodb

      • Mongodb介绍
      • Mongodb核心概念
          • 数据库
          • 集合
          • 文档
      • 安装Mongodb
          • 运行地址
            • 步骤1
            • 步骤2(新起一个cmd)
      • 命令行交互
          • 数据库命令
          • 集合命令
          • 文档命令
      • Mongoose
          • 设置运行命令
      • 字段类型
          • 字段值验证
      • Mongoose新增文档
      • Mongoose删除文档
      • Mongoose更新文档
      • Mongoose读取文档
      • 条件控制
      • 个性化读取
          • 字段筛选
          • 数据排序
          • 数据截取

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) => {
      // 错误处理
    });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自集成式 HTTP 代理方案

前言 大部分程序员,想必都会有一个常用的抓包代理工具; 但在座的各位,可曾见过这样一款集成在 Web 应用中的代理工具? ​,时长00:45 它是明显区别于传统代理工具的,有以下特性: 零安装、零配…

什么?免费使用GPT-4o?

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

十一、 进行个人信息保护认证的流程是怎样的?

2022 年 11 月 18 日,国家市场监督管理总局和国家网信办发布的《认证公告》以及附件《认证规则》,对开展个人信息保护认证的流程进行了细节说明,包括认证委托、技术验证、现场审核、认证结果评价和批准等环节。《认证公告》指出“从事个人信息…

越来越真的Deepfake再次引起网安界的关注

当地时间5月6日,全球网络安全领域最受关注的年度盛会 RSAC 2024在美国旧金山隆重开幕。当天,被誉为“安全圈奥斯卡”的创新沙盒大赛也决出了冠军,Reality Defender凭借其创新性的深度伪造(Deepfake)检测平台摘得桂冠&a…

合合信息携手业界专家,解码数据资产管理方法与入表的关键路径

随着财政部印发的《企业数据资源相关会计处理暂行规定》提出企业数据资产入表相关办法,《数据资产评估指导意见》中进一步规范数据资产评估行为,细化数据资产评估操作要求,对解决数据要素市场建设中的“数据赋值”难题提供了有效方案。数据资…

直播预约丨《袋鼠云大数据实操指南》No.2:实时开发,如何成为数据智能化的有效驱动力

近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念,为了更好地服务于客户…

HCIA和HCIP区别大吗?小白请看这

华为认证以其专业性和实用性受到了业界的广泛认可。 HCIA、HCIP、HCIP这三个级别,你会选哪个?IE含金量不用多说,IA还是IP,你会纠结吗。 但面对这两个级别的认证,初学者或者“小白”们可能会感到困惑:两者…

【资源分享】EViews13-最好用的计算经济学工具

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

【论文复刻】堆叠柱状图+饼图

复刻了一下这篇论文里的fig2c:Impacts of COVID-19 and fiscal stimuli on global emissions and the Paris Agreement | Nature Climate Change 效果图: 主要步骤: 1. 数据准备:随机赋值 2. 图像绘制:绘制堆叠柱状…

邓闲小——生存、生活、生命|真北写作

人生有三个层次∶生存、生活、生命。 生存就是做必须做的事。生存的模式是邓,是交易,是买卖。别人需要的东西,你生产出来,卖给他。哪怕这个东西没啥用,也可以卖,情绪也可以卖。你需要的东西,你花…

e行64位V11.17.4 安卓全局虚拟定位APP

e行最新版11.17.4 支持全局虚拟位置 小米手机 百度地图 高德地图 实测成功 其他app自测 不一定支持所有app 下载:https://www.123pan.com/s/HAf9-tsyCh.html

人员密集场所电气火灾预警系统 对设备漏电、短路、发热进行监测预警

谢继东15821713522 安科瑞Acrelcloud-6000安全用电管理平台是针对我国当前电气火灾事故频发而创新的一套电气火灾预警和预防管理系统.系统通过物联网技术对电气引发火灾的主要因素(导线温度、电流、电压和漏电流)进行不间断的数据跟踪与统计分析&#xf…

【 第一性原理计算方法及应用】

第一性原理计算方法及应用述

河南地区评政工师 需要发网络文章和刊登论文要求是什么

河南省政工师评审文件是《河南省企业思想政治工作人员专业职务评定办法》豫企政职(2010)1号。该文件将河南省政工师职称划分为助理政工师、政工师、高级政工师、教授级高级政工师四类。其中,每一个级别的政工师都需要发表相关文件&#xff0c…

基于uniapp+vue3+ts小程序项目实战之项目初始化

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

混淆矩阵实战

2.实战 1.加载数据 #加载数据 import pandas as pd import numpy as np data pd.read_csv(data_class_raw.csv) data.head()2.data.loc得到样本属性,并进行样本数据可视化 #可视化数据 %matplotlib inline from matplotlib import pyplot as plt#define X and y…

记一次ms17-010(永恒之蓝)漏洞复现

1.漏洞介绍: 永恒之蓝(ms17-010)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日, 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

解锁!智能代码助手 Baidu Comate 硬核能力

近日,在全球软件开发大会上暨智能软件开发生态展上,来自 Baidu Comate 的资深研发工程师分享了精彩的专题演讲,小编整理了演讲精华,和大家一起玩转“大模型软件研发”。 今天带来——吴玮琦《智能代码助手 Baidu Comate 的核心能…

【MySQL数据库】初步认识数据库,实现基本操作

在信息爆炸的今天,数据无处不在,它们构成了互联网世界的基石。但数据本身若未经有效组织和管理,就如同散落在沙滩上的珍珠,难以发挥其真正的价值。这时,“数据库”这一概念便如同一根线,将这些珍珠串联起来…

黑马新出的SpringBoot3项目后端总结

基础篇-00_SpringBoot3_Vue3导学课程_哔哩哔哩_bilibili 这个是视频链接 这个新课程里面用了一些企业里会用的注解例如Validated这种,业务流程清晰明了简单上手,算是可以了解最基本的Springboot开发流程,方便上手和快速入门 主要是下面这几…