用户模块的增删改查接口设计

news2024/11/25 16:52:40

MongoDB 数据库常用操作

MongoDB数据库中常用的操作包括:

  • 插入数据:使用insertOne()或insertMany()方法向集合中插入数据。
  • 查询数据:使用find()方法查询满足条件的数据。
  • 更新数据:使用updateOne()或updateMany()方法更新满足条件的数据。
  • 删除数据:使用deleteOne()或deleteMany()方法删除满足条件的数据。
  • 索引创建、删除、优化:使用createIndex()、dropIndex()等方法完成集合的索引操作,提升查询效率。
  • 聚合查询:使用aggregate()方法进行聚合查询,实现数据筛选、分组、排序、统计等复杂查询操作。
  • 分页查询:通过设置skip()和limit()方法完成分页查询操作。
  • 数据备份和恢复:使用mongodump和mongorestore等命令行工具进行数据库的备份和恢复操作。
  • 数据库连接、断开:使用mongoshell等客户端工具启动MongoDB服务器并连接到数据库,或使用ctrl+c命令关闭数据库连接。

以上是MongoDB数据库中常用的操作,应用广泛,需要掌握基本的操作语法和使用方法。

更多精彩内容,请微信搜索“前端爱好者戳我 查看

MongoDB的增删改查

MongoDB是一个NoSQL型数据库,它支持类似于关系型数据库中的增删改查操作。

本文主要介绍 MongoDB的增删改查操作

增加数据

insert()

MongoDB中的数据集称为集合(collection),你可以使用 insert() 方法向集合中添加一条或多条文档。

例如,我们要向名为students的集合中添加一条学生信息,可以使用以下代码:

db.students.insert({
   name: "张三",
   age: 20,
   gender: "男",
   address: "北京市海淀区"
})

insertOne()insertMany()

使用 insertOne() 或者 insertMany() 方法向集合中添加数据。

其中,

  • insertOne() 用于添加单条数据,
  • **insertMany()**用于添加多条数据。

示例:向名为users的集合中添加一条数据。

db.users.insertOne({
    name: "张三",
    age: 28,
    sex: "男",
    phone: "13888888888"
})

MongoDB insertMany()

insertMany()是MongoDB中一个用于向集合中插入多条文档的方法.

其语法格式为:

db.collection.insertMany(
   [ <document 1> , <document 2>, ..., <document n> ],
   { writeConcern: <document> }
)

其中,db.collection表示要插入的集合名称,[ <document 1> , <document 2>, ..., <document n> ]表示要插入的一组文档(以数组形式),{ writeConcern: <document> }是可选参数,表示写入数据时的安全级别,用于控制数据复制和确认操作。

使用insertMany()方法可以快速、方便地向MongoDB数据库中插入多条数据,适用于数据量较大的情况。

例如,我们可以使用以下代码向名为users的集合中插入3条数据:

db.users.insertMany([
    {
        name: "Lucy",
        age: 22,
        sex: "female"
    },
    {
        name: "Tom",
        age: 25,
        sex: "male"
    },
    {
        name: "John",
        age: 30,
        sex: "male"
    }
])

在执行上述代码后,就会向名为users的集合中插入3条文档数据。如果只想插入单条文档数据,可以使用insertOne()方法。

查询数据

MongoDB中查询数据可以使用 find() 方法。

例如,我们要在students集合中查询所有的学生信息,可以使用以下代码:

db.students.find()

在实际开发中,我们通常会加上查询条件

例如查询年龄为20的学生信息:

db.students.find({age: 20})

更新数据

update()

更新数据使用 update() 方法。

例如,我们现在想要将姓名为“张三”的学生信息的地址更改为“上海市浦东新区”,可以使用以下代码:

db.students.update(
   {name: "张三"},
   {$set: {address: "上海市浦东新区"}}
)

updateOne()updateMany()

使用 updateOne() 或者 updateMany() 方法修改集合中的数据。

其中,updateOne()用于修改单条数据,updateMany()用于修改多条数据。

示例:将名为users的集合中age属性等于28的数据的name属性改为李四。

db.users.updateOne({
    age: 28
},{
    $set: {
        name: "李四"
    }
})

MongoDB updateMany()

updateMany()是MongoDB中一个用于更新集合中多条文档的方法,

其语法格式为:

db.collection.updateMany(
   <filter>,
   <update>,
   { 
     upsert: <boolean>
     writeConcern: <document>
   }
)

其中,db.collection表示要更新的集合名称,<filter>表示查询要更新的条件,是一个文档类型的参数,<update>表示要更新的字段及其值,是一个文档类型的参数。

另外,upsert是一个可选参数,如果设为true,则会在集合中找不到对应记录时插入一条新的记录;writeConcern也是一个可选参数,表示写入数据时的安全级别,用于控制数据复制和确认操作。

使用updateMany()方法可以快速、方便地批量更新MongoDB数据库中的数据。

例如,我们可以使用以下代码将名为users的集合中age大于等于25的记录中的sex字段值为“male”更新为“man”:

db.users.updateMany(
   { age: { $gte: 25 } },
   { $set: { sex: "man" } }
);

这条代码执行后,会将名为users的集合中age大于等于25的所有文档的sex字段值更新为“man”。

删除数据

remove()

删除数据使用 remove() 方法。

例如,我们想要删除名字为“张三”的学生信息,可以使用以下代码:

db.students.remove({name: "张三"})

deleteOne()deleteMany()

使用 deleteOne() 或者 deleteMany() 方法从集合中删除数据。

其中,deleteOne()用于删除单条数据,deleteMany()用于删除多条数据。

db.users.deleteOne({
    name: "张三"
})

示例:删除名为users的集合中name属性等于“张三”的数据。

deleteMany()

deleteMany()是MongoDB中一个用于删除集合中多条文档的方法,

其语法格式如下:

db.collection.deleteMany(
   <filter>,
   { writeConcern: <document> }
)

其中,db.collection表示要删除数据的集合名称,<filter>表示要删除的条件,是一个文档类型的参数。

writeConcern是一个可选参数,表示写入数据时的安全级别,用于控制数据复制和确认操作。

使用deleteMany()方法可以快速、方便地批量删除MongoDB数据库中的数据。

例如,我们可以使用以下代码将名为users的集合中age大于等于25的记录删除:

db.users.deleteMany({ age: { $gte: 25 } });

这条代码执行后,会将名为users的集合中age大于等于25的所有文档删除。

用户模块的增删改查

添加系统用户

router.post('/add', async (ctx) => {  
  let { username, pwd } = ctx.request.body
  await Users.create({ username, pwd }).then(rel => {
    if (rel) {
      ctx.body = {
        code: 200,
        msg: '添加成功',
        data: rel
      }
    } else {
      ctx.body = {
        code: 300,
        msg: '添加失败'
      }
    }

  }).catch(err => {
    ctx.body = {
      code: 400,
      msg: '添加时出现异常'
    }
    console.error(err)
  })

})

修改系统用户

router.post('/update', async (ctx) => {
  let params = ctx.request.body
  await Users.updateOne(
    { _id: params._id },
    { username: params.username, pwd: params.pwd }
  ).then(rel => {
    ctx.body = {
      reslut: rel
    }
  }).catch(err => {
    ctx.body = {
      code: 400,
      msg: '修改时出现异常'
    }
    console.error(err)
  })
})

**错误展示 **

删除系统用户

router.post('/del', async (ctx) => {
  let { _id } = ctx.request.body
  await Users.findOneAndDelete({ _id }).then(rel => {
    ctx.body = {
      reslut: rel
    }
  }).catch(err => {
    ctx.body = {
      code: 400,
      msg: '删除时出现异常'
    }
    console.error(err)
  })
})

查询系统用户

查询所有系统用户

router.get('/find', async (ctx) => { 
  await Users.find().then(rel => { 
    ctx.body = {
      result: rel
    }
  }).catch(err => {
    ctx.body = {
      code: 400,
      msg: '查询时出现异常'
    }
    console.error(err)
  })
}) 

查询单个系统用户

router.get('/find/:id', async (ctx) => {
  await Users.findOne({ _id: ctx.params.id }).then(rel => {
    ctx.body = {
      result: rel
    }
  }).catch(err => {
    ctx.body = {
      code: 400,
      msg: '查询时出现异常'
    }
    console.error(err)
  })
})

module.exports = router

总结

  • 插入: insertOne 或者 insertMany; 新增:create
  • 查询: find 或者 findOne
  • 更新: updateOne、updateMany、findOneAndUpdate
  • 删除: deleteOne、deleteMany、findOneAndDelete

每日一课: ES6 新增属性 第一部分

ES6(ECMAScript 2015)是 JavaScript 的一个重要的更新版本,新增了许多新功能和特性。

在 ES6 中,有一些新增的属性,包括如下:

let 和 const 声明

ES6 新增加了 let 和 const 关键字,用于声明变量和常量。

let 声明的变量的作用域为块级作用域,而且不支持变量提升。

const 声明的常量不能被重新赋值,但是声明的对象可以修改其内部属性。

let a = 1;
const b = 2;

箭头函数

ES6 引入了箭头函数,可以更简洁地定义函数。

它的语法非常简单,使用 (参数) => {函数体} 的形式定义,可以省略掉 function 关键字和大括号。

// 传统函数定义
function add(a, b) {
  return a + b;
}

// 箭头函数定义
var add = (a, b) => a + b;

模板字符串

ES6 中新增了模板字符串,允许在字符串中插入变量和表达式,简化了字符串的拼接操作。

使用反引号 (`) 来定义模板字符串,使用 ${expression} 插入变量或表达式。

const name = 'Tom';
const age = 20;

console.log(`My name is ${name}, and I am ${age} years old.`);

解构赋值

解构赋值允许从数组或对象中提取值,并赋值给变量。

在 ES6 中,可以使用解构赋值来快速地提取数据。

// 解构赋值数组
const [a, b] = [1, 2];

// 解构赋值对象
const { name, age } = { name: 'Tom', age: 20 };

对象的扩展

在 ES6 中,对象的定义和使用更加便捷,新增了 对象字面量 的简洁语法,支持计算属性名称,新增了 Object.assign 方法等。

// 对象字面量的简写形式
const name = 'Tom';
const age = 20;
const user = { name, age };

// 使用计算属性名称
const propName = 'age';
const user = { name: 'Tom', [propName]: 20 };

// Object.assign 方法
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const obj = Object.assign({}, obj1, obj2);

前端爱好者

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

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

相关文章

【力扣刷题 | 第九天】150 逆波兰 239滑动窗口最大值

目录 前言&#xff1a; 150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; 239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 本片仍然是利用栈与队列的思想来解决实际问题&#xff0c;希望各位小伙伴可以和我…

chatgpt赋能python:Python断言之等于两个值其中一个

Python断言之等于两个值其中一个 在Python编程中&#xff0c;我们经常需要对程序进行断言&#xff0c;以判断程序是否正确地运行。其中一种常见的断言方式是判断某个方法的结果是否等于两个值中的其中一个。本文将介绍如何在Python中实现这种断言&#xff0c;并探讨其在实际应…

⑨电子产品拆解分析-触摸化妆镜

⑨电子产品拆解分析-触摸化妆镜 一、功能介绍二、电路分析以及器件作用1、电源部分2、触摸部分3、灯光控制部分三、数据手册以及其它资料1、注意点2、数据手册汇总一、功能介绍 ①短按白光、暖光、冷光三档色温切换;②长按支持无极调光;③三档调亮度关机记忆当前亮度功能;二…

chatgpt赋能python:Python模块更新技巧详解

Python模块更新技巧详解 为什么需要更新Python模块&#xff1f; Python语言自问世以来一直在得到广泛的应用&#xff0c;其中最大的原因在于它的灵活性和可扩展性。Python拥有丰富的模块库&#xff0c;覆盖了各种不同的应用场景。然而&#xff0c;由于软件环境不断发展&#…

服务器配置远程vscode

1 使用sftp同步远程代码 打开vscode&#xff0c;在扩展种搜索sftp&#xff0c;点击安装。   按住快捷键shiftctrlp&#xff0c;可以打开界面顶部的命令行&#xff0c;输入sftp&#xff0c;点击如下图的config选项&#xff1a;   会自动在.vscode目录下创建一个名为sftp.j…

photoscan(metashape)跑GPS辅助的无人机影像SfM(空三)教程

刚打开的photoscan界面如下图所示&#xff1a;   然后&#xff0c;点击工作区左上角的添加堆块选项&#xff1a;   可以看到新增了一个名为“Chunk 1”的堆块&#xff0c;然后&#xff0c;右击“Chunk 1”&#xff0c;依次选择add、添加照片&#xff1a;   即可弹出照…

踩坑系列 Spring websocket并发发送消息异常

文章目录 示例代码WebSocketConfig配置代码握手拦截器代码业务处理器代码 问题复现原因分析解决方案方案一 加锁同步发送方案二 使用ConcurrentWebSocketSessionDecorator方案三 自研事件驱动队列&#xff08;借鉴 Tomcat&#xff09; 总结 今天刚刚经历了一个坑&#xff0c;非…

云原生之使用Docker部署wordpress网站

云原生之使用Docker部署wordpress网站 一、wordpress介绍二、检查本地docker环境1.检查docker状态2.检查docker版本 三、下载wordpress镜像四、创建数据库1.创建数据目录2.创建mysql数据库容器3.查看mysql容器状态4.远程客户端测试连接数据库 五、部署wordpress1.创建wordpress…

java开发——程序性能的优化方法

java开发——程序性能的优化方法 1、算法逻辑优化2、redis缓存优化3、异步编排4、MQ削峰填谷5、预加载6、sql调优7、jvm调优8、集群搭建 后端开发必须学习的优化思想&#xff01; 1、算法逻辑优化 (1) 什么算法优化&#xff1f; 算法优化的思想就是&#xff0c;对于同一个问题…

ll 内容详解

linux的数据存储是以block&#xff08;块&#xff09;为单位的 &#xff1a; 1个block 4 KB 4096 字节 1KB 1024 字节[rootCTF-RHCSA-2 ~]# ll -sh total 76K &#xff08;列表中 所有文本文件 总共占用磁盘空间的KB大小 &#xff09;&#xff08;root用户家目录中…

cortex A7核按键中断实验

cortex A7核按键中断实验 一、分析电路图 实验目的&#xff1a;完成板子三个按键操作 1.1 电路图IO口 KEY1------>PF9 KEY2------>PF7 KEY3------>PF8 1.2 工作原理 KEY1 ------> PF9 ------> 按键触发方式&#xff1a;下降沿触发 KEY2 ------> PF7 …

ElasticSearch安装与介绍

目录 ElasticSearch安装与介绍Elastic Stack简介ElasticsearchLogstashKibanaBeats ElasticSearch快速入门简介下载单机版安装启动ElasticSearch 错误分析错误情况1错误情况2错误情况3 ElasticSearch-Head可视化工具通过Docker方式安装通过Chrome插件安装 ElasticSearch中的基本…

docker部署prometheus+grafana+alertmanager+dingtalk实现钉钉告警

目录 docker安装准备工作镜像拉取容器启动启动node-exporter启动prometheus启动grafana启动webhook-prometheus-dingtalk启动alertmanager所有容器启动成功如下 将prometheus和alertmanager进行关联在prometheus目录下新建一个rules.yml文件的告警规则修改prometheus.yml文件&a…

NLP学习笔记十二-skip-gram模型求解

NLP学习笔记十一-skip-gram模型求解 上一篇文章&#xff0c;我们见到了skip-gram模型的原理&#xff0c;这里我们在陈述一下skip-gram模型其实是基于分布相似性原理来设计的&#xff0c;在skip-gram模型中&#xff0c;他认为一个词的内涵可以由他的上下文文本信息来概括&#…

AcWing 837. 连通块中点的数量

题目如下&#xff1a; 给定一个包含 n个点&#xff08;编号为 1∼ n&#xff09;的无向图&#xff0c;初始时图中没有边。 现在要进行 m 个操作&#xff0c;操作共有三种&#xff1a; C a b&#xff0c;在点 a和点 b之间连一条边&#xff0c;a 和 b 可能相等&#xff1b;Q1 …

【iMessage苹果日历推真机群控】使用虚拟化平台创建一个 macOS 虚拟机

PC 虚拟机上部署群控推送并模拟苹果 iMessage 推送消息是比较复杂的任务。由于苹果的 iMessage 服务是基于苹果设备和操作系统的&#xff0c;模拟 iMessage 推送需要考虑苹果的生态系统和安全机制。 以下是一种可能的方法&#xff0c;但请注意这是一个高级设置&#xff0c;需要…

chatgpt赋能python:Python编程中的放大代码技巧

Python 编程中的放大代码技巧 Python 是一门广泛应用于各个领域的编程语言。由于它易学易用、可移植性好、开发效率高等特点&#xff0c;使其在人工智能、大数据分析、网站开发等领域被广泛应用。在实际编程中&#xff0c;随着代码量的增加&#xff0c;需要更好地组织和管理代…

BFS 广度优先搜索

广度优先搜索BFS&#xff08;Breadth First Search&#xff09;也称为宽度优先搜索&#xff0c;它是一种先生成的结点先扩展的策略&#xff0c;类似于树的层次遍历。 在广度优先搜索算法中&#xff0c;解答树上结点的扩展是按它们在树中的层次进行的。首先生成第一层结点&#…

TS系列之keyof详解,示例

文章目录 前言一、keyof是什么总结 前言 如果你用过TS的工具类型&#xff0c;Partial、Required、Pick、Record。那么你可能看过他们内部实现都有共同点就是keyof关键字。即使没有见过&#xff0c;那么下面就一起来了解一下&#xff0c;keyof关键字的详细作用吧。 一、keyof是…

Filebeat详细介绍,下载和启动,日志读取和模块设置等

目录 Filebeat介绍为什么要用Filebeat&#xff1f;架构下载启动读取文件自定义字段输出到ElasticSearch Filebeat工作原理harvesterprospectorinput启动命令参数说明 部署Nginx读取Nginx中的配置文件Modulenginx module 配置配置filebeat测试错误1错误2 Filebeat 介绍 Filebe…