MongoDB

1.MongoDB入门

1.1 MongoDB简介

MongoDB是一个开源、高性能、无模式的文档型数据库。设计的目的是简化开发和方便扩展,是NOSQL数据库的一种,是最像关系型数据库的非关系型数据库。

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

MongoDB中的数据是一个文档,是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,既一个文档认为就是一个对象。字段的数据类型是字符型,值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

1.1.1 业务场景

如果应用场景有以下三点:

  • 数据量大

  • 读写操作频繁

  • 价值较低,对事务性要求不高的数据

可以使用MongoDB存储数据。

具体的应用场景如:

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

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

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

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

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

1.1.2 体系结构

MySQL和MongoDB对比

image-20221028161457671

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
嵌入文档 MongoDB通过嵌入式文档代替多表连接
primary key primary key 主键.MongoDB自动将_id字段设置为主键

常见命令

数据库操作

show dbs:显示数据库列表

use :数据库不存在创建数据库,否则切换到指定的数据库。

查询文档

db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件

  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

要格式化显示结果的话,使用pretty() 方法。

db.col.find().pretty()

只返回特定的列,例如返回name的列:

db.col.find({}.name:1)

条件查询

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

And条件:db.col.find({key1:value1, key2:value2}).pretty()

Or条件:

db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

模糊查询

db.col.find(
   {key:/关键词/}
).pretty()

层级查询

db.col.find(
   {层级1.层级2.层级3:/关键词/}
).pretty()

就算某个层级是Array,也是只是输入层级字段名就可以。

统计个数

db.集合名称.find({条件}).count()

或者

db.集合名称.count({条件})

Limit和Skip方法

limit:读取指定数量的数据

skip:跳过指定数量的数据

posted @ 2023-07-23 15:23  享受生活2023  阅读(13)  评论(0编辑  收藏  举报