当前位置: 首页 > article >正文

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.kler.cn/news/160448.html

相关文章:

  • 【二分答案法】寻找峰值
  • ALPHA开发板烧录工具MfgTool烧写方法
  • Linux系统调试课:网络性能工具总结
  • HCIP考试实验
  • RDMA编程实例rdma_cm API
  • 多传感器融合SLAM在自动驾驶方向的初步探索的记录
  • Gitlab 安装手册
  • 七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
  • Python:核心知识点整理大全4-笔记
  • C++ IO库
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
  • 团建策划信息展示服务预约小程序效果如何
  • 短视频购物系统源码:构建创新购物体验的技术深度解析
  • 【前端设计模式】之观察者模式
  • vue3+ts自定义插件
  • 智能优化算法应用:基于白冠鸡算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Redis key过期删除机制实现分析
  • Docker中安装Oracle10g和oracle增删改查
  • java 操作git
  • Excel 动态拼接表头实现导出
  • easyui实现省市县三级联动
  • 一张图理解接口测试框架
  • 汽车网络安全--ISO\SAE 21434解析(一)
  • 华为OD机试 - 机场航班调度程序(Java JS Python C)
  • 持续集成交付CICD:Jenkins使用GitLab共享库实现自动更新前后端项目质量配置
  • 【Qt】QLineEdit显示输入十六进制,位数不足时按照规则填充显示及每两个字符以空格填充
  • 零基础小白怎么准备蓝桥杯-蓝桥杯竞赛经验分享
  • 【使用uniapp完成微信小程序的图片下载到本机】
  • 安全众测-内网渗透常用的工具和命令
  • 基于Maven的Spring Boot应用版本号获取解析