一文入门Mongodb

news2024/11/26 2:31:18

目录

  • 概述
  • 核心概念
  • 下载与安装
    • 版本问题
    • 环境配置
    • cmd运行
  • 数据库与集合命令
    • 数据库命令
    • 集合命令
    • 文档命令
  • mongoose
    • mongoose的使用
    • 插入
    • 字段类型
    • mongoose字段验证与强制性设置
    • 删除文档
    • 更新文档
    • 读取数据
    • 条件控制
  • 后记

概述

Mongodb是一个分布式文件存储的数据库。

官网:Mongodb官方网站

这是一个非常适用于前端工程师开发全栈的数据库,比较常见的一套技术栈:Vue+Node.js+Mongodb。值得学习了解。

核心概念

数据库(database):数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中也可也存放很多集合。

集合:类似于js中的数组,在JS中可以存放很多文档。

文档:是数据库中最小单位,类似于JS中的对象。

一般情况下,一个项目使用一个数据库,一个集合会存储同意类型的数据。

下载与安装

下载和安装高赞博客讲的很清楚,随便就可搜到,不赘述。

这里说一下下载和安装遇到的坑。

版本问题

建议下载5开头的版本。数据库启动后,有服务端和客户端。6以上的版本,运行客户端的语句mongo会出问题,需要下载一个MongoDB Shell。

安装后再运行也不一定能行,所以建议安装低版本的。

环境配置

环境配置这一步其实不需要太过着急,只是为了开机之后能顺利运行,其实手动打开也是一样。所以我觉得如果对这一块不熟练,要不就去搜一下教程,要不就不安这一步,需要用的时候直接运行就好啦。

cmd运行

一般情况下,终端运行成功,在以下地址会出现提示:

http://localhost:27017

在这里插入图片描述
这种就算是运行成功了。如果没运行成功,无法显示这个网页,要么就是前面的步骤失败,要么就是地址问题:要在data/db下运行命令才有用,如果在bin中运行,也打不开网页。

数据库与集合命令

数据库命令

显示所有数据库:

show dbs

切换指定数据库,如果数据库不存在自动创建数据库:

use 数据库名

显示当前所在数据库:

db

删除当前数据库:

use 库名
db.dropDatabase()

集合命令

创建集合:

db.createCollection('集合名词')

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

show collections

删除某个集合:

db.集合名.drop()

重命名集合:

db.集合名.renameCollection('newName')

文档命令

增、删、改、查。

插入信息(对象形式):

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

查询文档(没有查询条件就是查询全部,传进去的也是个对象):

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

更新数据(新对象代替旧对象):

db.集合名.update({条件}, {新文档内容})

修改数据:

db.集合名.update({条件}, {$set: {更改内容}}

删除文档

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

mongoose

Mongoose是一个对象文档模型库,作用是方便使用代码操作mongodb数据库。

官网:Mongoose官网

mongoose的使用

首先是安装:

npm i mongoose

安装后就可以在项目中使用了。在项目中同构mongoose用js语言就可以实现对数据库的操作,非常方便。

接下来是一些基本的操作代码:

//安装mongoose
//导入mongoose
const mongoose = require('mongoose')

//连接mongodb服务
mongoose.connect('mongodb://127.0.0.1:27017/test');

//设置回调
mongoose.connection.once('open', () => {
    console.log('连接成功')
});//设置连接成功的回调
mongoose.connection.once('error', () => {
    console.log('连接失败')
});//设置连接失败的回调 
mongoose.connection.once('close', () => {
    console.log('连接关闭')
})

//关闭mongodb的连接
setTimeout(() => {
    mongoose.disconnect();
}, 2000)

用node运行后:
在这里插入图片描述
上面集合的回调其实也可也用on去绑定。但是on和once是有区别的。这里来说一个情况,假如一个网站,请求了数据,但是网突然断掉了。调整好之后,如果用on,就会重新执行后面绑定过的那些函数,如果是once的话,因为之前执行过一次,就不会再次执行了。

插入

在刚刚的代码基础上进行插入,插入要写在连接成功下面的内容中。

这里以代码为例来讲解:

// 导入
const mongoose = require('mongoose');

// 连接服务
mongoose.connect('mongodb://127.0.0.1:27017/test');

// 设置回调
mongoose.connection.once('open', () => {
    console.log('连接成功')

    // 创建文档结构对象
    // 设置集合中文档的属性以及属性值的类型
    let StuSchema = new mongoose.Schema({
        name: String,
        age: Number
    })

    // 创建模型对象
    // 对文档操作的封装对象
    let StuModel = mongoose.model('Students', StuSchema);
    // 新增
    StuModel.create({
        name: 'ls',
        age: 34
    }).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
        mongoose.disconnect()
    })
})

先创建一个结构对象。结构对象,可以理解成表格中的字段,其实就是设置表格的字段;
创建模型对象,说白了就是填充表格。

我之前接触的低代码开发平台,不清楚底层,但是可以大胆猜测,用的就是这种非关系型数据库。也是先建立模型,再去创建模型对象,把模型和模型对象进行关联。

上面代码中需要注意的是,新增的create返回的实际上是一个promise对象,我们需要用promise的写法来处理结果。

另外还可以一次性插入多条文档:用insertmany,内部是一个数组:

    BookModel.insertMany([{
        name: 'zxdds1',
        author: 'zxd'
    }, {
        name: 'zxdds2',
        author: 'zxd'
    }, {
        name: 'zxdds3',
        author: 'zxd'
    }, {
        name: 'zxdds4',
        author: 'zxd'
    }, {
        name: 'zxdds5',
        author: 'zxd'
    }
    ])

最后效果:
在这里插入图片描述

字段类型

上面说到了文档结构,文档结构其实是表格中的字段。设置表格中的字段名与字段类型。

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可也用[]来标识
Date日期
BufferBuffer对象
Mixed任意类型,需要使用mongoose.Schema.Types.Mixed指定
Objectld对象ID,需要使用mongoose.Schema.Types.ObjectId指定
Decimal128高精度数字,需要使用mongoose.Schema.Types.Decimal128指定

mongoose字段验证与强制性设置

对文档字段值进行验证。

验证的方式很简单,类似于前端的数据处理。这里请看一段代码:

const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/test');

mongoose.connection.once('open', () => {
    console.log('OK');

    //创建集合信息
    let BookSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true//该属性必须不为空
        },
        author: String
    })
    let BookModel = mongoose.model('BookSchema', BookSchema)
    //在数据库的集合中添加数据
    BookModel.create({
        name: 'zxdds',
        author: 'zxd'
    }).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
        mongoose.disconnect()
    })
})

在这段代码中,就对name进行了处理,规定了数据的类型为String,并且要求一定要存在。

另外,还有一些其他设置:

require: true  必填项
default: '' 匿名项
enum: ['', ''] 枚举类型,设置的数据必须是数组类型
unique: true 唯一值

删除文档

可以根据条件来删除对应数据:

    BookModel.deleteOne(
        {_id: '648fbba34da32e4dbed0d6a5'}
    ).then(err => {
        console.log(err)
        return;
    }, data => {
        console.log(data)
    })

最后结果:
在这里插入图片描述
也可也批量删除,deleteMany。

    BookModel.deleteMany(
        {author: 'zxd'}
    ).then(err => {
        console.log(err)
        return;
    }, data => {
        console.log(data)
    })

在这里插入图片描述

更新文档

也就是我们的修改操作。

更新一条数据:

    // 更新数据
    BookModel.updateOne(
        {name: 'zxdds5'},
        {name: 'wxy'}).then(err => {
            console.log(err)
        }, data => {
            console.log(data)
        })

批量更新:

    // 批量更新
    BookModel.updateMany(
        {author: 'zxd'},
        {author: 'zxdd'}).then(err => {
            console.log(err)
        }, data => {
            console.log(data)
        })

读取数据

读取单条:

    BookModel.findOne({name: 'zxdds1'}).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

批量读取:

    BookModel.find({author: 'zxdd'}).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

读取所有:

    BookModel.find().then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

条件控制

如何设置查询文档的条件
比大小:

//找价格小于20的图书
BookModel.find({price: {$lt: 20}}).then...

大于就是gt。

逻辑或:

//曹雪芹或者余华的书
BookModel.find({$or: [{author: 'cxq'}, {author: 'yh'}]).then...

逻辑与:

BookModel.find($and: [{price: {$gt: 300}}, {author: 'yh'}]).then...

后记

以上就是Mongodb入门内容。后面还会有相关博客的更新,欢迎关注!

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

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

相关文章

使用 AI 修复去除不需要的对象

Inpainting 是一种运用了稳定扩散(Stable Diffusion)技术来部分重绘图像的方法。简单来讲需准备一张图像,绘制一块遮罩以标明想要重绘的图像区域,同时提供一些重绘提示。随后稳定扩散就能根据这些提示,重新绘制遮罩区域…

layui(5)——内置模块分页模块

模块加载名称&#xff1a;laypage laypage 的使用非常简单&#xff0c;指向一个用于存放分页的容器&#xff0c;通过服务端得到一些初始值&#xff0c;即可完成分页渲染&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

聊一聊mysql的MVCC

技术主题 在mysql世纪使用中&#xff0c;经常涉及到MVCC的概念&#xff08;Multi-Vsersion Concurrency Control&#xff09;&#xff0c;即多版本并发控制&#xff0c;一种并发控制方法&#xff0c;根本目的是主为了提升数据库的并发性能。 mvcc为什么产生 数据库最原生的锁…

设计模式大全

使用设计模式的目的&#xff1a; 程序猿在编码的过程中面临着来自耦合性、内聚性、可维护性、可扩展性、重用性、灵活性等多方面的挑战。设计模式是为了让程序具有更好的&#xff1a; 1&#xff09;重用性&#xff0c;即相同功能的代码编写一次即可&#xff0c;不用重复编写 …

3-JVM 运行时数据区

目录 1.堆&#xff08;线程共享&#xff09;&#xff08;最大的一块区域&#xff09; 2.Java虚拟机栈&#xff08;线程私有&#xff09; 3.本地方法栈&#xff08;线程私有&#xff09; 4.程序计数器&#xff08;线程私有&#xff09; 5.方法区&#xff08;线程共享&#…

Oracle JSON_ARRAYAGG()函数的默认排序问题

引入&#xff1a; 在实际操作中&#xff0c;俺写了这样一个Funtcion&#xff1a; FUNCTION fun_get_xxx(v_param_one VARCHAR2) RETURN CLOB ASv_OUTPUT CLOB;BEGINWITH temp_table AS (SELECT * FROM (( SELECT one.action_id,two.log_timeFROM table_one oneLEFT JOIN table…

Python程序设计基础:字符串

文章目录 一、字符串二、字符串的索引与切片三、字符串处理与操作四、format()格式化方法五、字符串与数值的转换 一、字符串 在Python中&#xff0c;使用单引号或双引号括起来的内容&#xff0c;称为字符串类型数据&#xff08;str&#xff09;&#xff0c;可以使用以下4种方…

Linux主分区,扩展分区,逻辑分区的联系和区别

基本概念 硬盘分区有三种&#xff0c; 主磁盘分区、扩展 磁盘分区、 逻辑分区。 一个 硬盘 主分区至少有1个&#xff0c;最多4个&#xff0c;扩展分区可以没有&#xff0c;最多1个。且 主分区扩展分区总共不能超过4个。 逻辑分区可以有若干个。 在windows下激活的 主分区是 …

树形结构-二叉树结构

树形结构 树形结构简介 树结构是一种非线性储存结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合 树的相关术语 结点&#xff08;Node&#xff09; 使用树结构存储的每一个数据元素被成为“结点” 结点的度&#xff08;Degree of Node&#xff09; 某个结点所拥…

一次完整的Loadrunner基本流程操作

目录 一.生成脚本&#xff1a; 二.回放脚本&#xff1a; 三.创建场景&#xff1a; 四.生成报告&#xff1a; Loadrunner基本流程操作 准备条件&#xff1a; 一.安装loadrunner 二.破解loadrunner &#xff08;注&#xff1a;本次使用lr11版本可以兼容的IE浏览器版本为I…

Qt简单讲解项目结构

Qt简单讲解项目结构 项目结构 主函数入口 #include "mainwindow.h"#include <QApplication>// 程序入口 argc 表示命令行变量的数量 argv表示命令行变量的数组 int main(int argc, char *argv[]) {// a表示应用程序对象QApplication a(argc, argv);MainWin…

绿色节能数据中心供配电系统设计

随着新一代信息技术的快速发展&#xff0c;数据资源存储、计算和应用需求大幅提升&#xff0c;机房在各个领域都有着广泛的应用&#xff0c;如学校内有专用机房、通信类企业有通信机房等。近年来&#xff0c;国家对新型数据中心机房建设也越来越重视&#xff0c;据工信部、国家…

Flutter私服搭建之package查询

温馨提示&#xff1a;这是一篇私有的package客户端查询的平台搭建文章&#xff0c;牵扯到python中的Djiango框架&#xff0c;虽和Flutter相关&#xff0c;但客户端的代码并没有关联&#xff0c;请您根据需要进行阅读。 公有的package&#xff0c;对于一个Flutter开发者而言&…

centos + lnmp + tp6部署的项目,访问的时候经常出现No input file specified

1.检查路径设置 检查你的 Nginx 配置文件是否正确指定了 PHP 路径&#xff0c;确认文件路径是否正确。同时&#xff0c;确保你的 Web 服务器具有访问权限。 server { listen 80; server_name example.com; root /usr/share/nginx/html; index index.html ind…

汽车电子行业ECU烧录工艺人必须面对的重要课题

在汽车电子行业ECU烧录是很一个关键工序&#xff0c;如何有效地通过对它的过程进行管控是每个工艺人必须面对的重要课题。 为了解决烧录过程管控的问题&#xff0c;我们合共软件针对汽车电子行业研发的HG MES中有专门的烧录模块用于应对这一问题。对ECU烧录管控的核心目标是如…

MySQL 数据库的命令操作

文章目录 一.Mysql数据库的基本概念二.Mysql数据库系统发展史三.现主流Mysql数据库介绍四.关系数据库五.非关系数据库介绍六.MySQL安装方法1. 创建新的数据库2.创建新的表3.删除指定的数据库4.删除指定的数据表5.向数据表中插入新的数据记录6.修改、更新数据表中的数据记录7.在…

腾讯云对象存储COS及CDN加速配置

1. 登陆腾讯云官网&#xff0c;进入腾讯云对象存储COS控制台 腾讯云&#xff1a;https://cloud.tencent.com 2. 创建存储空间 3. 添加自定义CDN加速域名 在腾讯云COS的指定的存储桶中添加自定义CDN加速域名 在阿里云官网添加一个解析记录&#xff0c;等待两分钟就可以用该域名…

新书上市丨开启学习自然语言处理与ChatGPT的精彩旅程,你需要这本书!

2022年10月30日&#xff0c;ChatGPT 的横空出世&#xff0c;引起了全球范围内的广泛关注。微软创始人比尔盖茨 (Bill Gates) 认为 “ChatGTP 与互联网具有同等重要的意义”。作为一个人工智能系统&#xff0c;ChatGPT 能准确识别用户意图&#xff0c;与用户进行对话并提供有价值…

postgresql优化案例三:recheck cond

文章目录 1.SQL语句2.查看改善前执行计划:3.解决方案3.1增加work_mem的size3.2.创建合适的索引 4.改善后执行计划 1.SQL语句 delete from sap_dispatchingd_hist awhere exists (select 1 from sap_dispatchingm_hist b where a.ffact_nob.ffact_noand a.fsfc_nob.fsfc_noand …

正确认识:DOTA-CH2-Alkynyl(HCl salt),螯合剂修饰肽,物理化学性质参数

1.试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; DOTA-CH2-Alkynyl(HCl salt)使用有机溶剂或浓盐酸&#xff08;HCl&#xff09;&#xff0c;在酸化的环境中螯合剂修饰肽的主要优点是高效率和不存在有机溶剂。它可以应用于多种…