【Mongodb】增删改查

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.hqwc.cn/news/701009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

屡被约谈的货拉拉三闯IPO,CEO周胜馥IPO前套现11亿

近日,货运巨头货拉拉第三次闯关IPO。虽然其实现首次年度盈利,但光鲜数据背后的盈利模式却频遭诟病。 货拉拉的创始人周胜馥从美国高校毕业后,曾供职于贝恩咨询公司,并在期间对创业产生了浓厚兴趣。抛开履历中的高学历好工作的部分…

JavaScript精粹(一)

JavaScript(简称为JS)是一种广泛应用于网页开发的脚本语言,具有以下几个主要作用: 网页交互:JavaScript 可以用于创建动态的网页效果,例如响应用户的操作,实现页面内容的动态更新,以…

谷歌邮箱2024最新注册教程

大家好,我是蓝胖子,今天教大家如何注册谷歌邮箱 谷歌邮箱的注册后面的用途会经常用得到 首先,需要魔法自行解决 第一步:打开谷歌官网 www.google.com 确保谷歌官网能正常打开 第二步:创建账号 接下来可能会遇到这…

52岁「豹嫂」代夫尽孝送花畀奶奶被赞

歌手胡蓓蔚与「豹哥」单立文相爱28年,两人曾上节目分享婚姻之道,指婚姻最紧要有忍耐力,要抗拒引诱。其实除了忍耐力,胡蓓蔚和奶奶相处都有一套。 早前单立文带胡蓓蔚及妈妈到米芝连一星餐厅叹美食,庆祝奶奶89岁生日&am…

接口、会话控制

文章目录 接口介绍RESTful APIjson-server接口测试工具apipost公共参数和文档功能 会话控制cookie介绍和使用运行流程浏览器中操作Cookieexpress中cookie操作 Sessionsession运行流程:session中间件配置session 和 cookie 的区别CSRF跨站请求伪造 tokenJWT介绍与演示…

Linux基础之进程-进程状态

目录 一、进程状态 1.1 什么是进程状态 1.2 运行状态 1.2 阻塞状态 1.3 挂起状态 二、Linux操作系统上具体的进程状态 2.1 状态 2.2 R 和 S 状态的查看 2.3 后台进程和前台进程 2.4 休眠状态和深度休眠状态 一、进程状态 1.1 什么是进程状态 首先我们知道我们的操作系…

vue+canvas实现根据数据展示不同高度,不同j渐变颜色的长方体效果

文章目录 不一样的长方体1. 实现效果预览2.实现思路2.1效果难点2.2 实现思路 3.实现3.1 测试数据编写3.2 编写canvas绘制函数 不一样的长方体 1. 实现效果预览 俗话说的好,没有实现不了的页面效果,只有禁锢的思想, 这不ui又给整了个新奇的页…

探索执法部门如何在不依赖面部识别的情况下追踪感兴趣的人

概述 视频证据在犯罪调查中的重要性正日益凸显,其数量之多已经达到了前所未有的水平。据美国司法援助局(Bureau of Justice Assistance, BJS)的数据显示,大约80%的犯罪案件都涉及到某种形式的视频证据,并且这一比例还…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP,在全世界有着广泛的玩家群体,更是在今年暴雪国服宣布回归之后,吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

Notepad8.1.9汉化中文版

下载地址:Notepad8.1.9.zip 一款优秀免费的源代码编辑器,支持语法高亮的开源纯文本编辑器,并且可以替代系统自带的记事本的功能。

Java入门之数据类型和变量

1.字面常量 字面常量就是在程序运行中,固定不变的量,例如如下的代码 public class Demo{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println…

汇昌联信电商:拼多多网店好做吗?

在电子商务的海洋中,拼多多以其独特的团购模式和亲民策略迅速崛起,吸引了大批消费者和商家的目光。对于“拼多多网店好做吗?”这个问题,答案并非简单的是与否,而是需要从多个维度进行深入分析。 一、市场定位与竞争环境 拼多多定…