MongoDB知识总结

这里写自定义目录标题

  • MongoDB基本介绍
  • MongoDB基本操作
    • 数据库相关
    • 集合相关
    • 增删改查

MongoDB基本介绍

  1. 简单介绍
    MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
    它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
    Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  2. 业务应用场景
    MongoDB可应对“三高“需求
    High performance:对数据库高并发读写的需求
    Huge Storage:对海量数据的高效率存储和访问的需求
    High Scalability && High Availability:对数据库的高可扩展性和高可用性的需求
  3. 什么时候选择MongoDB
    应用不需要事务及复杂join支持
    新应用,需求会变,数据模型无法确定,想快速迭代开发
    应用需要2000-3000以上的读写QPS(更高也可以)
    应用需要TB甚至PB级别数据存储
    应用要求存储的数据不丢失
    应用需要99.999%高可用
    应用需要大量的地理位置查询、文本查
  4. 体系机构
    在这里插入图片描述
  5. 数据类型
    MongoDB的最小存储单位就是文档document对象。文档document对象对应于关系型数据库的行。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称 Binary JSON;BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和Bin Data类型。
BSON中,除了基本JSON类型: string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date, object id, binary data, regular expression和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息
在这里插入图片描述

MongoDB基本操作

数据库相关

1、查看数据库

show databases;

2、创建或切换数据库

use 数据库名

选择数据库(如果数据库不存在,不会报错;会隐式创建:当后期该数据库有数据时自动创建)

3、删除数据库(先选中数据库)

db.dropDatabase()

集合相关

1、查看所有集合

show collections

2、创建集合(插入数据会隐式创建)

db.createCollection('集合名')

3、删除集合

db.集合名.drop()

增删改查

db.集合名.insert(JSON数据)
use test2 db.c1.insert({uname:"webopenfather",age:18}) ----在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

mongodb会给每条数据增加一个全球唯一的_id键
在这里插入图片描述
一次性插入多条数据

db.c1.insert([     {uname:"z3", age:3},     {uname:"z4", age:4},     {uname:"w5", age:5} ])

快速插入10条数据
由于mongodb底层使用JS引擎实现的,所以支持部分js语法。因此:可以写for循环

for (var i=1; i<=10; i++) {     db.c2.insert({uanme: "a"+i, age: i}) }
  1. 删除文档
db.集合名.remove(条件[,是否删除一条]) ---默认是false

是否删除一条
true:是(删除的数据为第一条)

db.c3.remove({uname:"zs3"},true) ---删除uname:"zs3"的第一条
db.c3.remove({uname:"zs3"}) --删除uname:"zs3"的所有
  1. 修改文档
db.集合名.update(条件,新数据[是否新增,是否修改多条,])

新数据是否需要使用修改器,如果不使用,那么会将新数据替换原来的数据。

1db.集合名.update(条件,{修改器:{键:值}}[是否新增,是否修改多条,])

修改器 作用
$inc 递增
$rename 重命名列
$set 修改列值
$unset 删除列

是否新增
指条件匹配不到数据则插入(true是插入,false否不插入默认)

是否修改多条
指将匹配成功的数据都修改(true是,false否默认)

db.c3.update({uname:"zs1"},{$set:{uname:"zs2"}}) ----查找不到,不做修改
db.c3.update({uname:"zs1"},{$set:{uname:"zs2"}},true)  ----查找不到,则插入
db.c3.update({uname:"zs10"},{$inc:{age:2}}) ---{uname:"zs10"}的年龄加2岁
----修改gcc的username为bareth,age+11,sex字段重命名为sexuality,删除address字段
db.people.update({username:"gcc"},{$set:{username:"bareth"},$inc:{age:11},$rename:{sex:"sexuality"},$unset:{address:true}
})
  1. 查询文档
db.集合名.find(条件[,查询的列])

在这里插入图片描述
其他语法

db.集合名.find({键:{运算符:值}})

在这里插入图片描述

----查询所有数据
db.c1.find()
---只看uname列
db.c1.find({},{uname:1})
---除了uname列都看
db.c1.find({},{uname:0})
-----查询age大于5的数据
db.c1.find({age:{$gt:5}})
----查询年龄是5岁、8岁、10岁的数据
db.c2.find({age:{$in:[5,8,10]}})
----查询年龄不是null的数据
db.c2.find({ age: { $ne: null } })
----查询年龄一定存在且不是null的数据
db.c2.find({ age: { $exists: true, $ne: null } })
1:主键为32的商品
db.goods.find({goods_id:32});2:不属第3栏目的所有商品($ne)
db.goods.find({cat_id:{$ne:3}},{goods_id:1,cat_id:1,goods_name:1});3:本店价格高于3000元的商品{$gt}
db.goods.find({shop_price:{$gt:3000}},{goods_name:1,shop_price:1});4:本店价格低于或等于100元的商品($lte)
db.goods.find({shop_price:{$lte:100}},{goods_name:1,shop_price:1});5:取出第4栏目或第11栏目的商品($in)
db.goods.find({cat_id:{$in:[4,11]}},{goods_name:1,shop_price:1});6:取出100<=价格<=500的商品($and)
db.goods.find({$and:[{price:{$gt:100},{$price:{$lt:500}}}]);7:取出不属于第3栏目且不属于第11栏目的商品($and $nin$nor分别实现)
db.goods.find({$and:[{cat_id:{$ne:3}},{cat_id:{$ne:11}}]},{goods_name:1,cat_id:1})
db.goods.find({cat_id:{$nin:[3,11]}},{goods_name:1,cat_id:1});
db.goods.find({$nor:[{cat_id:3},{cat_id:11}]},{goods_name:1,cat_id:1});8:取出价格大于100且小于300,或者大于4000且小于5000的商品()
db.goods.find({$or:[{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]},{$and:[{shop_price:{$gt:4000}},{shop_price:{$lt:5000}}]}]},{goods_name:1,shop_price:1});9:取出goods_id%5 == 1,,1,6,11,..这样的商品
db.goods.find({goods_id:{$mod:[5,1]}});10:取出有age属性的文档
db.stu.find({age:{$exists:1}});
# 含有age属性的文档将会被查出

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

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

相关文章

elasticsearch 是如何实现 master 选举的?

Elasticsearch 中的 master 选举机制主要是通过选举算法实现的。Elasticsearch 使用了 Raft 算法作为其选举算法&#xff0c;用于在集群中选举出一个 master 节点&#xff0c;以及确定新的 master 节点。 在 Elasticsearch 中&#xff0c;所有节点在启动时都会自动加入一个名为…

【Hive】——数据仓库

1.1 数仓概念 数据仓库&#xff08;data warehouse&#xff09;&#xff1a;是一个用于存储&#xff0c;分析&#xff0c;报告的数据系统 目的&#xff1a;是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持 特点&#xff1a; 数据仓库本身不产生任何数据…

Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第一章、传统SSM开发回顾以及问题 Spring SpringMVC Mybatis SSM 实现一个简单功能 员工添加、查询… SSM项目简单实现 项目 需求分析 —>概要设计 —>&#xff08;库表设计&#xff09; —> 详细…

从零开始的c语言日记day40——字符函数和字符串函数——内存函数

常用函数介绍 求字符串长度 strlen 长度不受限制的字符串函数 Strcpy Strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 Strstro strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset Memcmp 使用Asser…

C语言——二级指针

指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里&#xff1f;——这就是二期指针 int a 10;int *pa &a;int **ppa &pa;//a的地址存放在pa中&#xff0c;pa的地址存放在ppa中。 //pa是一级指针&#xff0c;ppa是二级指针。 对…

【Taro】React+Taro项目实现页面样式兼容手机端和Pad端

前言&#xff1a; taro本身就是兼容多端的ui框架&#xff0c;是现在开发中比较常用的框架&#xff0c;兼容小程序、h5等&#xff0c;所以下面介绍下一些特殊情况的时候怎么实现样式兼容&#xff0c;在不同分辨率下 1.手机端兼容 在config/index.js配置文件中添加如下配置 desi…

数据库函数大全(更新中)

IF(expr1,expr2,expr3) SELECT IF(1<2,yes ,no);#如果 1<2 满足返回 ‘yes’ 否则 ‘no’,也可以用于修改 UPDATE salary SET sex IF(Sex m, f, m); # sex m 改为 ‘f’ , sex f 改为 ‘m’ with with xx_v1 as( sql查询语句1 ),xx_v2 as( sql查询语句2 ),xx_v…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)

文章目录 一、应用生命周期二、生命周期函数定义三、生命周期五函数练习 一、应用生命周期 1、定义 应用生命周期就是代表了一个HarmonyOS应用中所有页面从创建、开启到销毁等过程的全生命周期。查看路径如下&#xff1a; Project/entry/src/main/ets/entryability/EntryAbili…

libevent库中的http相关函数举例

evhttp_set_cb 是一个用于设置回调函数的函数&#xff0c;该回调函数在 Libevent 的 HTTP 服务器框架 (libevent-http) 中用于处理 HTTP 请求。这个函数需要三个参数&#xff1a;一个 evhttp 实例&#xff0c;一个回调函数&#xff0c;以及一个用于传递到回调函数的 "ctx&…

SpringBoot集成Elasticsearch8.x(9)|(RestClient实现Elasticsearch的简单操作)

SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch的操作) 文章目录 SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch的操作)@[TOC]前言一、DSL 介绍二、初始化客户端三、封装RestClient dsl执行三、更新1.实用script更新es…

Google Guava简析

Google Guava 是Google开源的一个Java类库&#xff0c;对基本类库做了扩充。感觉最大的价值点在于其 集合类、Cache和String工具类。 github项目地址&#xff1a;GitHub - google/guava: Google core libraries for Java github文档地址&#xff1a;Home google/guava Wiki …

17、XSS——session攻击

文章目录 一、session攻击简介二、主要攻击方式2.1 预测2.2 会话劫持2.3 会话固定 一、session攻击简介 session对于web应用是最重要&#xff0c;也是最复杂的。对于web应用程序来说&#xff0c;加强安全性的首要原则就是&#xff1a;不要信任来自客户端的数据&#xff0c;一定…

Spring Boot与Mybatis基础配置(手动写增删改查)

一、 配置 1.新建项目 1.项目基础配置 解释&#xff1a;记得把这个改成start.aliyun.com要不没有java8也就是jdk1.8 2.项目依赖配置 2.配置maven 配置前&#xff1a; 配置后&#xff1a; 3.创建子项目并配置父子项目pom.xml 配置父pom.xml 声明当前项目不是要打成jar包的…

NFC和蓝牙在物联网中有什么意义?如何选择?

#NFC物联网# #蓝牙物联网# 在物联网中&#xff0c;NFC和蓝牙有什么意义&#xff1f; NFC在物联网中代表近场通信技术。它是一种短距离、高频的无线通信技术&#xff0c;可以在近距离内实现设备间的数据传输和识别。NFC技术主要用于移动支付、电子票务、门禁、移动身份识别、防…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中&#xff0c;我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了&#xff0c;而且依靠互联网来开展他们的日常生活&#xff0c;包括购物、玩游戏、看电…

【python VS vba】(7) python与numpy (建设ing)

目录 1 numpy 的基本介绍 2 numpy里的两种新数据类型&#xff1a;ndarray 和 matrix 2.1 numpy特殊的数据类型 2.1.1 python的数据类型 2.1.2 首先 python原生的list 和 tuple 2.1.3 numpy的数据类型 2.2 np.matrix() 或者 np.mat() 2.2.1 首先&#xff0c;两种写法相…

基于PicGo实现Typora图片自动上传GitHub

文章目录 一. 引言二. 原理三. 配置3.1 GitHub 设置3.2 下载配置 PicGo3.3 配置 Typora3.4 使用 一. 引言 Typora是一款非常好的笔记软件&#xff0c;但是有一个比较不好的地方&#xff1a;默认图片是存放在本地缓存中。这就会导致文件夹一旦被误删或电脑系统重装而忘记备份文件…

pymysql报错: unable to rollback、Already closed

参考&#xff1a; https://www.coder.work/article/4516746 https://www.cnblogs.com/leijiangtao/p/11882107.html https://stackoverflow.com/questions/55116007/pymysql-query-unable-to-rollback unable to rollback处理&#xff1a; # 关闭光标对象 cursor.close() # 关…

华为OD机试 - 执行任务赚积分(Java JS Python C)

题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。 输入…