> 文档中心 > MongoDB的基础概念、基本命令使用

MongoDB的基础概念、基本命令使用

目录

  • 一、MongoDB概念
    • 1、使用业务应用场景
    • 2、 使用场景选择
    • 3、简介
    • 4、体系结构
  • 二、基本命令使用
    • 1、数据库操作
    • 2、集合操作
    • 3、文档操作
      • 3.1.1.新增文档
      • 3.1.2.查询文档
      • 3.1.3.更新文档
      • 3.1.4.删除文档
      • 3.1.5.高级查询
    • 4、命令总结★

一、MongoDB概念

1、使用业务应用场景

具体的应用场景参考如下:

1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。

3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将

订单所有的变更读取出来。

4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

2、 使用场景选择

应用不需要事务以及复杂的 join 支持。

应用数据模型无法确定,想快速迭代开发。

应用读写的QPS高。

应用需要大数据级别数据存储。

应用需要大量的地理位置查询、文本查询(比如:日志储存)。

3、简介

MongoDB是一个开源、高性能、无模式的文档型数据库,是最像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于 JSON 的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

MongoDB中的记录是一个文档,它是一个由字段和值对(fifield:value)组成的数据结构象,即一个文档认为就是一个对象。

字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

具有:高性能、高可用、高拓展、无模式结构 特点

4、体系结构

在这里插入图片描述

默认情况下,mongodb有三个默认库:admin、local、config

  • admin: 这是"root"数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

二、基本命令使用

1、数据库操作

# 创建/使用数据库(如果数据库不存在,则创建数据库dbame,否则切换到指定的数据库dbname)use 数据库名称(比如:use testdb)# 查询所有库(新增的库,没有创建集合则不会被查询到)show dbs# 查看当前操作的库db# 删除库use 具体数据库名db.dropDatabase()

2、集合操作

创建集合-显示创建:

# 进入testdb数据库use testdb# 创建集合db.createCollection('name');

在这里插入图片描述

查询所有集合:

show collections

在这里插入图片描述

删除集合:
为了演示删除效果,多创建几个集合,如下:
在这里插入图片描述
使用删除方法,删除名称为test1的集合,命令如下:

# db.集合名称.drop(),比如:db.test1.drop()

效果:
MongoDB的基础概念、基本命令使用

3、文档操作

一下操作时,数据库名称为tsetdb,集合的名称为test

3.1.1.新增文档

新增文档,多个由逗号分隔 【如果当前的集合名称不存在,则会被自动创建】

测试内容:

// articleid、content、userid为文档中的字段名称    db.test.insert([{ "articleid":"1", "content":"测试内容1", "userid":"1"    },{ "articleid":"2", "content":"测试内容2", "userid":"2"    }]);

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

3.1.2.查询文档

查询所有:

db.test.find()

在这里插入图片描述
查询所有-指定字段:
查询所有数据,并且返回指定字段,默认会返回_id字段,0表示不返回

db.test.find({},{userid:1,content:1,_id:0})

在这里插入图片描述
指定查询-返回一条文档的所有字段:

 db.test.findOne({userid:'1'})

指定查询-返回所有文档的所有字段:

db.test.find({userid:'1'})

指定查询-返回特定字段:
查询userid为1的所有数据,并且返回指定字段,默认会返回_id字段,0表示不返回

db.test.find({userid:'1'},{userid:1,content:1,_id:0})

在这里插入图片描述

3.1.3.更新文档

1、覆盖更新:
文档只会保留更新的字段,其他字段被删除

db.test.update({userid:"1"},{content:"修改内容"});

效果:
MongoDB的基础概念、基本命令使用
2、局部更新:
通过$set指令 ,使得只有被修改的字段才进行更新

db.test.update({userid:"2"},{$set:{content:"局部更新内容"}})

在这里插入图片描述
3、批量更新:
不管是上面说到的覆盖更新还是局部更新,都只会去匹配一条数据,也就是说当更新了一条满足要求的数据后,即使还有满足要求的数据也不会进行更新,除非再次执行更新命令,显然这种是不合理的,所以需要使用到批量更新

db.test.update({userid:"1"},{$set:{content:"批量更新"}},{multi:true})

4、创建更新:
如果更新的文档值不存在,则插入文档进行新增

db.test.update({userid:"3"},{$set:{content:"创建更新"}},{upsert:true})

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

3.1.4.删除文档

删除全部文档:

db.test.remove({})

按条件删除文档:

# 比如:删除userid为1的文档数据db.test.remove({userid:"1"})

3.1.5.高级查询

1、统计查询:

# {}表示带上条件db.test.count() 或者 db.test.count({userid:'1'})

2、分页查询:
可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据

# 第一页,每页两条(下标值为0、1),所以skip为0db.test.find().skip(0).limit(2)# 第二页(下标值为2、3),所以skip为2db.test.find().skip(2).limit(2)

效果:
在这里插入图片描述
3、排序查询:
sort() 方法对数据进行排序, 1 为升序排列, -1 是用于降序排列

db.test.find().sort({userid:-1})

4、分页排序查询:
先 sort(), 然后是 skip(),最后是显示的 limit()

db.test.find().skip(0).limit(2).sort({userid:-1})

5、正则查询:

# field表示文档中的某个字段db.lhz.find({field:/正则表达式/})

6、比较查询:
大于-$gt、小于-$lt、大于等于-$gte、小于等于-$lte、不等于-$ne

# userid大于10db.test.find({ "userid" : { $gt: 10 }})

7、包含查询:
包含-$in,不包含-$nin

db.test.find({userid:{$in:["1","2"]}})

8、多条件查询:
andor可以结合使用

# 且查询db.test.find({$and:[{userid:"1"},{articleid:{$gt:1}}]})# 或查询db.test.find({$or:[{userid:"2"},{articleid:{$lt:1}}]})

4、命令总结★

选择切换数据库:use articledb
插入数据:db.comment.insert({bson数据})
查询所有数据:db.comment.find();
条件查询数据:db.comment.find({条件})
查询符合条件的第一条记录:db.comment.findOne({条件})
查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)
查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)
修改数据:

db.comment.update({条件},{修改后的数据}) 或db.comment.update({条件},{$set:{要修改部分的字段:数据})

修改数据并自增某字段值:db.comment.update({条件},{$inc:{自增的字段:步进值}})
删除数据:db.comment.remove({条件})
统计查询:db.comment.count({条件})
模糊查询:db.comment.find({字段名:/正则表达式/})
条件比较运算:db.comment.find({字段名:{$gt:值}})
包含查询:

db.comment.find({字段名:{$in:[值1,值2]}})  或db.comment.find({字段名:{$nin:[值1,值2]}})

条件连接查询:

db.comment.find({$and:[{条件1},{条件2}]}) 或db.comment.find({$or:[{条件1},{条件2}]})