MongoDB数据库操作及操作命令

目录

一、基础概念

二、安装mongod

 三、命令交互数据库

(1)数据库命令

(2)集合命令

(3)文档命令

 四、Mongoose

(1)增加一条数据

(2)插入多个数据 

(3)删除一条数据

(4)删除多个数据

(5)更新数据

(6)更新多条数据

(7)读取条件某一条数据

(8)根据id读取某一条数据

(9)读取多个数据

(10)根据查询条件读取

(11)个性化读取

(12)开发常见的操作

五、图形化管理


一、基础概念

Mongodb 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/
数据库的主要作用就是用来管理数据,能够达到增删改查的作用,语法也和JavaScript相似。
在使用数据库之前要了解三个概念
(1)数据库:是一个数据仓库,例如一个数据库下有很多个集合(也可以理解成多个表)
(2)集合:表,在JavaScript的提现形式 可以理解为 数组 [ { id:2 ,name:ultraman } ]
(3)文档:就可以理解成一条数据了 在JavaScript的提现形式 可以理解为 { id:2 ,name:ultraman }
用js代码举个例子:
{
    "users": [
        {
            "id": 1,
            "name": "张三",
            "age": 18,
        },
        {
            "id": 2,
            "name": "李四",
            "age": 20,
        },
    ],
    "articles": [
        {
            "id": 1,
            "title": "标题1",
            "content": "内容1",
        },
        {
            "id": 2,
            "title": "标题2",
            "content": "内容2",
        },
    ],

}

在代码中 整个对象就是一个数据库(JSON文件) 里面包含着两个集合(表) 一个用户表和一个文章表 文档就可以理解成某条表中的数据。

当然也可以有多个数据库,一般情况下一个项目使用一个数据库

二、安装mongod

下载地址: https://www.mongodb.com/try/download/community
建议选择 zip 类型, 通用性更强
配置步骤如下:
  1. 将压缩包移动到 C:\Program Files 下,然后解压
  2. 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
  3. mongodb bin 目录作为工作目录,启动命令行
  4. 运行命令 mongod

由于每次都需要在 bin目录下才能运行mongod,我们可以通过环境变量的形式进行配置

  1. 复制一下 目录名称 例如 :C:\Program Files\mongodb-win32-x86_64-windows-5.0.19\bin
  2. 打开编辑变量 找到path 把路径进行追加就好了 
  3. 下次可以在cmd命令窗口测试

 三、命令交互数据库

命令交互也就是通过cmd命令行的形式进行交互

(1)数据库命令

  显示所有的数据库
show dbs
切换到指定的数据库,如果数据库不存在会自动创建数据库
use 数据库名

显示当前所在的数据库

db

删除当前数据库

use 库名
db.dropDatabase()

(2)集合命令

创建集合
db.createCollection('集合名称')

显示当前数据库中的所有集合

show collections
删除某个集合
db.集合名.drop()
重命名集合
db.集合名.renameCollection('newName')

(3)文档命令

插入文档
db.集合名.insert(文档对象);

 查询文档   _id 是 mongodb 自动生成的唯一编号,用来唯一标识文档

db.集合名.find(查询条件)

 更新文档

db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})

删除文档

db.集合名.remove(查询条件)

 四、Mongoose

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/bilibili");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  //5. 创建文档结构对象
  let BookSchema = new mongoose.Schema({
    title: String,
    author: String,
    price: Number,
  });
  //6. 创建文档模型对象
  let BookModel = mongoose.model("book", BookSchema);
  //7. 插入文档
  BookModel.create(
    {
      title: "西游记",
      author: "吴承恩",
      price: 19.9,
    },
    (err, data) => {
      if (err) throw err;
      //输出 data 对象
      console.log(data);
      //8. 断开连接
      mongoose.disconnect();
    }
  );
});
//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});
//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

字段类型

    title: String,
    price: Number,
    isHot: Boolean,
    category: Array,
    Date: Date,
    Buffer: Buffer,
    Mixed : mongoose.Schema.Types.Mixed, // 接收所有类型
    ObjectId: mongoose.Schema.Types.ObjectId, // 主键 对象ID 用来查询其他表
    Decimal:  mongoose.Schema.Types.Decimal128, // 高精度类型

有些键也可以写出对象的形式,进行字段验证

(1)必填项

title: {
    type: String,
    required: true // 设置必填项
}

 (2)默认值

author: {
    type: String,
    default: '匿名' //默认值
}

(3)枚举值

gender: {
    type: String,
    enum: ['男','女'] //设置的值必须是数组中的
}

(4)唯一值

username: {
    type: String,
    unique: true
}
unique 需要 重建集合 才能有效果

(1)增加一条数据

mongoose.connection.on("open", () => {
    console.log("连接成功");
    let BookSchema = new mongoose.Schema({
        title: String,
        author: String,
        price: Number
    });

    let BookModel = mongoose.model('book', BookSchema);

    BookModel.create({
        title: "《水浒传》",
        price: 15,
    }).then((res) => {
        console.log(res);
        console.log("保存成功!");
    })
   
});

接下来以 模型.操作 为代码

(2)插入多个数据 

 BookModel.insertMany([
        {
            title: "《水浒传》",
            price: 15,
            isHot: true
        },
        {
            title: "《西游记》",
            price: 20,
            isHot: true
        }
    ]).then((res) => {
        console.log(res);
        console.log("保存成功!");
    })

(3)删除一条数据

 BookModel.deleteOne({ _id: "64c604fb363d6aa46652f368" }).then((res) => { 
        console.log(res);
        console.log("删除成功!");
    })

(4)删除多个数据

isHot为false的全部删除

  BookModel.deleteMany({ isHot: false }).then((res) => {
        console.log(res);
        console.log("删除多个成功!");
    })

(5)更新数据

参数1:条件 ,参数2 更新内容

    BookModel.updateOne({ _id: "64c604fb363d6aa46652f362" },{price:99}).then((res) => { 
        console.log(res);
        console.log("更新成功!");
    })

(6)更新多条数据

    BookModel.updateMany({ isHot: true, },{isHot:false}).then((res) => {
        console.log(res);
        console.log("更新多个成功!");
    })

(7)读取条件某一条数据

     BookModel.findOne({ _id: "64c604fb363d6aa46652f362" }).then((res) => { 
        console.log("读取成功!",res);
    })

(8)根据id读取某一条数据

  BookModel.findById("64c604fb363d6aa46652f362").then((res) => { 
        console.log("读取成功!",res);
    })

(9)读取多个数据

   BookModel.find({ isHot: false, }).then((res) => {
        console.log("读取多个成功!",res);
    })

(10)根据查询条件读取

一些条件不能用> < = 这些来使用判断 ,要有相对于的命令符号

  •  > 使用 $gt
  •  < 使用 $lt
  • >= 使用 $gte
  •  <= 使用 $lte
  • !== 使用 $ne

下面举例一些 运算的判断

    // 1.多个条件的查询 价格大于20 并且 isHot 为 false
    BookModel.find({ price: { $gt: 20 }, isHot: false }).then((res) => {
        console.log("价格大于20的", res);
    })
    
    // 2.多个条件的查询都要满足 价格大于20 或者 isHot 为 false
    BookModel.find({ $and: [{ price: { $gt: 20 } }, { isHot: false }] }).then((res) => {
        console.log("价格大于20的", res);   
    })
    

    // 3.多个条件的查询满足一个 价格大于20 或者 isHot 为 false
    BookModel.find({ $or: [{ price: { $gt: 20 } }, { isHot: true }] }).then((res) => {
        console.log("价格大于20的", res);
     })

    // 4. 查询价格在 20 - 30 之间的数据
    BookModel.find({ price: { $gte: 20, $lte: 30 } }).then((res) => {
        console.log("价格大于20的", res);
    })

    // 5.正则查询
    BookModel.find({ title: { $regex: /三国/ } }).then((res) => {
        console.log("查询包含三国的", res);
    })

(11)个性化读取

查找后也可以通过链式调用进行后续的操作,也是进行了Promise的封装

  // 1.只读取出数据的某些字段
    BookModel.find().select({title:1,price:1,_id:0}).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 2.排序 1 升序 -1 降序
    BookModel.find().select({title:1,price:1,_id:0}).sort({price:1}).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 3.数据截取
    BookModel.find().select({title:1,price:1,_id:0}).limit(2).then((res) => {
        console.log("筛选结果", res);
    })
    
    // 4.截取3-4条
    BookModel.find().select({title:1,price:1,_id:0}).skip(2).limit(2).then((res) => {
        console.log("筛选结果", res);
    })

(12)开发常见的操作

 // 登录
  login: async ({ username, password }) => {
    return UserModel.find({ username, password });
  },

  // 更新个人用户信息
  updateUserInfo: async (info) => {
    // 如果没有上传头像,就删除avatar字段 就不更新了
    if (info.image == "") delete info.image;
    return UserModel.updateOne({ _id: info.id }, info)
      .then((res) => {
        return UserModel.findOne({ _id: info.id });
      })
      .catch((err) => {
        console.log("修改失败了", err);
      });
  },

  // 获取用户列表
  getUserList: async ({ pageSize = 10, pageNum = 1, keyword = "" }) => {
    return {
      code: 200,
      msg: "获取成功",
      data: {
        pageNum: pageNum,
        pageSize: pageSize,
        total: await UserModel.find({
          username: { $regex: keyword },
        }).countDocuments(),
        userList: await UserModel.find({ username: { $regex: keyword } })
          .select("-password")
          .skip((pageNum - 1) * pageSize)
          .limit(pageSize),
      },
    };
  },

  // 添加用户
  addUser: async (info) => {
    return UserModel.find({ username: info.username }).then((res) => {
      console.log("res", res);
      if (res.length) {
        return { code: 500, msg: "用户名已存在" };
      } else {
        UserModel.create(info);
        return { code: 200, msg: "添加成功", data: { userInfo: info } };
      }
    });
  },

  // 删除用户
  deleteUser: async (info) => {
    return UserModel.deleteOne({ _id: info.id }).then((res) => {
      console.log(res, "res");
      if (res.deletedCount) {
        return { code: 200, msg: "删除成功" };
      } else {
        return { code: 500, msg: "删除失败" };
      }
    });
  },

  // 更新用户信息
  updateUser: async (info) => {
    if (info.password == "") delete info.password;
    return UserModel.updateOne({ _id: info._id }, info)
      .then((res) => {
        console.log(res, "res");
        if (res.modifiedCount) {
          return { code: 200, msg: "更新成功" };
        } else {
          return { code: 500, msg: "更新失败" };
        }
      })
      .catch((err) => {
        console.log(err);
      });
  }

五、图形化管理

Robo 3T 免费 https://github.com/Studio3T/robomongo/releases
Navicat 收费(可以去某站安装破解版教程)  https://www.navicat.com.cn/

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL安装和卸载

1.MySQL概述 MySQL概述 MySQL是一个[关系型数据库管理系统]&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;2008年被sun公司收购&#xff0c; 2009sun又被oracle收购&#xff0c;所以属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用…

SystemC的调度器

文章目录 前言调度器初始化evaluatewait updatenotify delta notificationtime notification仿真结束 前言 SystemC是基于C的库&#xff0c;主要用来对 IC 进行功能建模和性能建模。有时也被用来当做 RTL (register transfer level) 级的升级版 HLS(High Level synthesis) 直接…

小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)

一、概述 Kubernetes&#xff08;简称K8S&#xff09;是一个开源的容器编排和管理平台&#xff0c;是由Google发起并捐赠给Cloud Native Computing Foundation&#xff08;CNCF&#xff09;管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。 以下是Kube…

优维低代码实践:对接数据

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

2023-08-09 LeetCode每日一题(整数的各位积和之差)

2023-08-09每日一题 一、题目编号 1281. 整数的各位积和之差二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例1&#xff1a; 示例2&#xff1a; 提示&#xff1a; 1 …

遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素

一、遍历集合List的五种方法 测试数据 List<String> list new ArrayList<>(); list.add("A");list.add("B");list.add("C");1. 普通for循环 普通for循环&#xff0c;通过索引遍历 for (int i 0; i < list.size(); i) {Syst…

数据清理在数据科学中的重要性

什么是数据清理&#xff1f; 推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 在数据科学中&#xff0c;数据清理是识别不正确数据并修复错误的过程&#xff0c;以便最终数据集可供使用。错误可能包括重复字段、格式不正确、字段不完整、数据不相关或不准…

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

1.Cloud Studio&#xff08;云端 IDE&#xff09;简介 Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 Clou…

python之prettytable库的使用

文章目录 一 什么是prettytable二 prettytable的简单使用1. 添加表头2. 添加行3. 添加列4. 设置对齐方式4. 设置输出表格样式5. 自定义边框样式6. 其它功能 三 prettytable在实际中的使用 一 什么是prettytable prettytable是Python的一个第三方工具库&#xff0c;用于创建漂亮…

微信云开发-数据库操作

文章目录 前提初始化数据库插入数据查询数据获取一条数据获取多条数据查询指令 更新数据更新指令 删除数据总结 前提 首先有1个集合(名称:todos). 其中集合中的数据为: {// 计划描述"description": "learn mini-program cloud service",// 截止日期"…

软件系统测试报告

1.简介 1.1.编写目的 本文档是对重庆市XXX项目验收测试所做的说明&#xff0c;为充分利用已有的软硬件资源&#xff0c;配合对系统应用模块的运行测试方案,查缺补漏完善系统的各项具体功能,保证项目的顺利进行&#xff0c;本测试报告有助于实现以下目标&#xff1a; 明确本次…

Mermaid语法使用

Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)

1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…

Spring Boot统一处理功能——拦截器

1.用户登录权限校验 ⽤户登录权限的发展从之前每个⽅法中⾃⼰验证⽤户登录权限&#xff0c;到现在统⼀的⽤户登录验证处理&#xff0c;它是⼀个逐渐完善和逐渐优化的过程。 1.1最初用户登录 我们先来回顾⼀下最初⽤户登录验证的实现⽅法&#xff1a; RestController RequestMap…

【OpenGauss源码学习 —— 执行算子(SeqScan算子)】

执行算子&#xff08;SeqScan算子&#xff09; 执行算子概述扫描算子SeqScan算子ExecInitSeqScan函数InitScanRelation函数ExecSeqScan函数 总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵…

Unity制作护盾——2、力场冲击波护盾

Unity制作力场护盾 大家好&#xff0c;我是阿赵。   继续做护盾&#xff0c;这一期做一个力场冲击波护盾。 一、效果展示 主要的效果并不是这个球&#xff0c;而是护盾在被攻击的时候&#xff0c;会出现一个扩散的冲击波。比如上图在右边出现了冲击波 如果在左边被攻击&am…

Java——基础语法(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Pytorch深度学习-----现有网络模型的使用及修改(VGG16模型)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

Spring(13) IOC的工作流程

目录 一、定义二、Bean的声明方式三、IOC的工作流程 一、定义 IOC&#xff1a;全称是 Inversion Of Control&#xff0c;也就是控制反转&#xff0c;它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用某个对象的实例&#xff0c;那么直接从 IOC 容器里面去获取就…

【自动化测试框架】关于unitttest你需要知道的事

一、UnitTest单元测试框架提供了那些功能 1.提供用例组织和执行 如何定义一条“测试用例”? 如何灵活地控制这些“测试用例”的执行? 2.提供丰定的断言方法 当测试用例的执行结果与预期结果不一致时&#xff0c;判定测试用例失败。在自动化测试中&#xff0c;通过“断言”…
最新文章