MongoDB笔记1——MongoDB简介

embedded/2024/10/18 19:28:32/

MongoDB

什么是MongoDB

2007年10月,MongoDB由10gen团队所开发,2009年2月首度推出。

基于分布式文件存储的数据库由C++语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

优点

  1. MongoDB提供了一个面向文档存储,操作起来比较简单和容易
  2. 如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所谓的分片
  3. MongoDB支持各种编程语言:RUBY、PYTHON、JAVA、C++、PHP、C#等多种语言
  4. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更新的扩展性

为什么学习MongoDB

MongoDB特点

  • 无需要跨文档或跨表的事务及复杂的join查询支持
  • 敏捷迭代的业务,需求变动频繁,数据模型无法确定
  • 存储的数据格式灵活,不固定,或属于半结构化数据库
  • 业务并发访问量大
  • TB级以上的海量数据存储,且数据不断增加
  • 要求存储的数据持久化、不丢失
  • 需要99.999%的数据高可用性
  • 需要大量的地理位置查询、文本查询

MongoDB解决MySQL的"三高"问题

  1. 数据库高并发写入需求
  2. 对海量数据高效率存储访问需求
  3. 数据库高扩展和高可用的需求

MongoDB实际应用

  1. 社交场景,比如朋友圈,附近的人的地点的存储
  2. 游戏场景,比如玩家当前装备、得分等
  3. 物流场景,比如快递的位置,状态,途径
  4. 视频场景,比如直播中的点赞数和互动留言等

MongoDB的缺点

  1. MongoDB不支持事务
  2. MongoDB不能进行多表联查

MongoDB和Mysql对比

 MongoDB名词概念

SQL术语/概念MongoDB术语/概念解释说明
databasedatabase数据库
tablecollection数据量表/集合
rowdocument
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

MongoDB与MySql存储方式比较

链接MongoDB

使用用户名和密码链接登录到默认数据库

使用默认的服务器和账号登录

# mongo

设置管理员

>use admin

>db.createUser({user:"admin",pwd:"password",role:[{role:"root",db:"admin"}]});

使用自定义的账号密码登录其他服务器

# mongo --port 27017 -u admin -p password --authenticationDatabase admin

MongoDB数据库显示

查看所有数据库

show dbs

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数 据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

MongoDB数据库创建/删除

创建数据库:

use dbname

如果数据库不存在,则创建数据库,否则切换到指定数据库

在 MongoDB 中,集合只有在内容插入后才会创建! 也就是说,创建集合(数据表)后要再插入一个文档 (记录),集合才会真正创建。

通过 db 来查看当前使用的数据库

删除数据库:

db.dropDatabase()

MongoDB操作集合

创建集合:

db.createCollection("集合名")

查看集合:

show collections/show tables

删除集合:

db.集合名.drop()

MongoDB数据类型

shell默认使用64位浮点型数值。("x":3.14)或("x":3}。

对于整型值,可以使用NumberInt(4 字节符号整数) 或NumberLong(8字节符号整数), {“x”:NumberInt("3"") }{“x”:NumberLo ng("3"")}

MongoDB在集合中插入数据

插入的数据被称为文档。

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

db.集合名.insert(document)
 

db.col.insert({title: '一些数据',description: 'MongoDB 是一个 Nosql 数据库',tags: ['mongodb', 'database', 'NoSQL']})

MongoDB在集合中更新数据

更新数据

语法:

db.集合名.update({查询条件},{$set:{更新内容}},

    {

        upsert:<boolean>,

        multi:<boolean>,

    }

)

upsert: 默认为false ,如果查询不到数据,则把跟新输入插入

multi:默认为false,默认只改一条,true,更改多条

db.col.update({'name':'张三'},{$set:{'name':'张三丰'}})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{multi:true})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{upsert:true,multi:true})

如果我们想实现在某一列上在原有的值基础之上进行递增1效果可以用$inc运算符来实现

语法:

db.集合名.update({查询条件},{$inc:{字段名:NumberInt(1)}})

例如

db.col.update({‘_id':’1'},{$inc:{likenum:NumberInt(1)}})

MongoDB在集合中删除文档

删除文档: db.集合名称.remove(<query>, { justOne: <boolean>} )

删除所有数据:

db.col.remove({})

删除一条数据:

db.col.remove({“name”:”张三”},{justOne:true})

删除多条数据:

db.col.remove(“name”:”张三”})

MongoDB在集合中查询文档

MongoDB 查询文档使用 find() 方法。

find() 方法以非结构化的方式来显示所有文档。

db.collection.find(query)

pretty() 方法以格式化的方式来显示所有文档,linux下有用。

>db.col.find().pretty()

MongoDB查询条件

MongoDB的 And条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。

db.col.find({key1:value1, key2:value2})

以上实例中类似于 WHERE 语句:WHERE key1=‘value1’ AND key2=‘value2'

MongoDB的 Or条件

MongoDB OR 条件语句使用了关键字 $or

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

MongoDB的 And 与 Or 一起使用

AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where key1>value1 AND (key2 = value2 OR key3 = value3)’

db.col.find({“key1": {$gt:value1}, $or: [{“key2": “value2"},{“key3": “value3"}]})

MongoDB范围条件

col"集合中 “key" 大于100,小于 200 的数据 > db.col.find({“key” : {$lt :200, $gt : 100}}) 相当于RDBMS: Select * from col where key>100 AND key<200;

MongoDB的模糊查询

查询 name 包含“小"字的文档:

db.col.find({“name”:/小/})

查询 name 字段以“小"字开头的文档:

db.col.find({“name”:/^小/})

查询 name字段以“小"字结尾的文档:

db.col.find({“name”:/小$/})

MongoDB的Limit 和 Skip操作

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

> db.col.find().limit(NUMBER)

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

> db.col.find().limit(NUMBER).skip(NUMBER)

MongoDB的统计

在 MongoDB 中使用count() 来统计个数

>db.col.count([{key:value}])

MongoDB的排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指 定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 - 1 是用于降序排列。

>db.col.find().sort({KEY:1})

MongoDB操作小结

MongoDB的索引

查看索引

db.collection.getIndexes()

创建索引(单个索引,复合索引)

db.collection.createIndex(keys,option)

例如 :db.col.createIndex({username:1[, key:1]})

删除索引

db.collection.dropIndex(index)

例如:db.col.dropIndex({username:1})


http://www.ppmy.cn/embedded/93418.html

相关文章

write_sdc和write_script区别

文章目录 一、set_disable_clock_gating_check二、write_sdc和write_script区别1. write_sdc2. write_script 一、set_disable_clock_gating_check set_disable_clock_gating_check对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查。 对于工具插入或者…

Python中各类常用内置转换函数

Python中各类常用内置转换函数 函数功能说明int(x)将 x 转换为整数类型float(x)将 x 转换为浮点数类型str(x)将 x 转换为字符串repr(x)将 x 转换为表达式字符串eval(str)计算在字符串中的有效Python表达式&#xff0c;并返回一个对象list(s)将序列 s 转换为一个列表tuple(s)将…

Linux与Docker常用运维命令一览

大家好&#xff0c;欢迎各位工友。 在博主陆陆续续的运维过程中&#xff0c;经常会用到许多运维相关的命令&#xff0c;以往都是现用现查&#xff0c;如今抽时间都记录一下&#xff0c;便于查阅和使用。 Linux常用命令 文件和目录操作 ls&#xff1a;列出目录内容cd [direc…

用Python打造精彩动画与视频,9.1 综合运用所学技术进行项目开发

第九章&#xff1a;综合项目 9.1 综合运用所学技术进行项目开发 在本章中&#xff0c;我们将综合运用前面章节所学的各种技术&#xff0c;开发一个完整的3D动画项目。这个项目将包括3D建模、动画制作、渲染&#xff0c;以及一些高级技巧&#xff0c;如光照和材质设置。通过这…

自动化报表实践小结

这一天午休刚休息完&#xff0c;财务经理就喊我&#xff1a;“***&#xff0c;我们找个会议室聊聊”。我是一脸茫然&#xff0c;心里想着&#xff0c;我跟他也没什么私下的工作交流啊&#xff0c;能聊啥呢&#xff0c;还要找个会议室&#xff1f;究竟是什么事情呢&#xff1f;有…

Stable Diffusion绘画 | 插件-prompt-all-in-one:轻松搞定提示词

插件安装包下载链接&#xff1a;sd-webui-prompt-all-in-one 安装成功后&#xff0c;正向与反向提示词输入框下方&#xff0c;会多出一排的标签。 常用功能 翻译 在下方输入框内&#xff0c;使用中文输入提示词内容&#xff1a; 点击回车↩︎后&#xff0c;会在提示词输入框…

C#图片批量下载Demo

目录 效果 项目 代码 下载 效果 C#图片批量下载 项目 代码 using Aspose.Cells; using NLog; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.…

深入理解单元测试与JUnit:从基础概念到实践操作

文章目录 前言一、单元测试是什么&#xff1f;单元测试的特点单元测试的好处 二、junit是什么&#xff1f;三、操作步骤1.junit安装2.maven新建项目3. 新建java文件4. 生成测试类5. 编写测试方法6. 测试结果 总结 前言 随着软件开发行业的不断发展&#xff0c;测试的重要性日益…