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属性的文档将会被查出

相关推荐

  1. MongoDB基础知识

    2023-12-06 16:06:05       53 阅读
  2. MongoDB基础知识

    2023-12-06 16:06:05       34 阅读
  3. mongodb的基本知识

    2023-12-06 16:06:05       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 16:06:05       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 16:06:05       97 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 16:06:05       78 阅读
  4. Python语言-面向对象

    2023-12-06 16:06:05       88 阅读

热门阅读

  1. C++字符去除空格反转顺序输出

    2023-12-06 16:06:05       53 阅读
  2. 数据结构-堆

    2023-12-06 16:06:05       58 阅读
  3. 基数排序简单了解

    2023-12-06 16:06:05       57 阅读
  4. 基于Hadoop的异构网络协同过滤推荐算法设计

    2023-12-06 16:06:05       49 阅读
  5. 可以使用京东商品详情 API 获取哪些商品信息?

    2023-12-06 16:06:05       61 阅读
  6. Gson与FastJson详解

    2023-12-06 16:06:05       47 阅读
  7. (C++20) constinit常量初始化

    2023-12-06 16:06:05       59 阅读
  8. P5706 【深基2.例8】再分肥宅水

    2023-12-06 16:06:05       63 阅读
  9. AIOps、微服务和云平台

    2023-12-06 16:06:05       56 阅读
  10. 做题笔记:SQL Sever 方式做牛客SQL的题目--VQ29

    2023-12-06 16:06:05       53 阅读
  11. 蓝桥杯官网练习题(平均)

    2023-12-06 16:06:05       58 阅读
  12. vscode配置代码片段

    2023-12-06 16:06:05       54 阅读
  13. rocketmq 集群环境部署及与spring cloud 集成

    2023-12-06 16:06:05       54 阅读
  14. RepidJson将内容写入文件简单代码示例

    2023-12-06 16:06:05       55 阅读
  15. 深度学习中的Transformer机制

    2023-12-06 16:06:05       57 阅读