MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB、NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助用户轻松学习,高效学习。https://time.geekbang.org/course/intro/253?tab=catalog

MongoDB 是基于 JSON 数据模型的文档数据库,属于 NoSQL 数据库(非关系型数据库),其优势在于高性能、易部署、易使用、存储数据方便。

  • NoSQL指的是“不仅仅是SQL”,以 key-vlalue形式存储,不一定遵守传统数据库的某些要求。
  • MongoDB中没有行和列的概念,取而代之的是“集合”和“文档”,使用JSON存储数据
  • 应用场景:数据库高并发高度写时、海量数据高效存储访问时、数据库高扩展高可用性时。

下载并安装 MongoDB 数据库:

mac安装mongoDB详细步骤 - 简书介绍: 基于分布式文件存储的数据库,使用C++编写。应用最广泛的非关系型数据库(NoSQL)。NoSQL与SQL区别:NoSQL是基于键值对保存数据的,无复制的sql查询,表...https://www.jianshu.com/p/a594e6482e5chttps://www.jianshu.com/p/a594e6482e5c

下载并安装 MongoDB 图形化管理软件 Mongo Campass:

MongoDB Compass | MongoDBhttps://www.mongodb.com/products/compass

MongoDB开发常见注意事项:

《MongoDB高手课》学习记录(第二十一天) - SegmentFault 思否首先强调的一点就是,一定要选择与你所使用的版本相兼容的驱动程序,特别是使用程序框架的时候,否则会遇到一些无法解释的奇葩问题。驱动的兼容列表点这里。https://segmentfault.com/a/1190000023123907?utm_source=sf-similar-article

一. 启动MongoDB数据库服务器

(1)启动MongoDB数据库服务器

在终端依次输入:(开启后终端不能关闭!!!若关闭则MongoDB服务结束!!!)

# 打开mongodb的bin文件夹
cd /usr/local/mongodb/bin
# 查看文件夹内容
ls
# 启动mongodb数据库服务器
mongod --dbpath=../data/db

(因为本机的Mongodb没有设置自启动,所以每次要使用的时候都要启动一下)

注意:MongoDB的端口号默认是27017

(2)打开Mongodb数据库

新启动一个终端(之前的终端不要关闭),依次输入:

# 打开mongodb的bin文件夹
cd /usr/local/mongodb/bin
# 连接本机mongodb数据库
mongo
# 显示当前mongodb中存在的数据库
show dbs

二. 了解MongoDB术语

MongoDB 基础(一):MongoDB 术语/概念_五虎战画戟的博客-CSDN博客_mongodb是什么MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它的特点:高性能、易部署、易使用,存储数据非常方便。https://blog.csdn.net/qq_41887214/article/details/123413093


三. MongoDB数据库基本操作

1. 使用数据库、新建数据库、新建集合、查看数据库、查看集合

# 恢复Mongodb数据库文件(一般把本地数据复制到云服务器上的时候会用,本地使用一般不需要)
mongorestore# 显示当前mongodb中存在的数据库
show dbs
# 使用/新建test数据库(test是数据库名)
# 若test数据库不存在,则use表示新建数据库,但并没有立刻新建成功,要插入数据后才算新建成功
use test
# 插入一条数据,集合为product(若不存在则自动新建),文档为{"title":"111"}
db.product.insert({"title":"111"})
# 查看当前数据库
db
# 查看当前数据库中有哪些集合(集合类似于SQL数据库中的表)
show collections
# 查看product集合的json文档(json文档即集合中的数据)
db.product.find()

2. 增删改查(CRUD)基础操作

(1)增数据 insert

#【 fruit 是我的 test 数据库中的一个集合 】# 1. 向集合中插入数据
# 插入一条记录
db.fruit.insertOne({name: "apple"})
# 插入多条记录
db.fruit.insertMany([{name: "apple", price: 10},{name: "pear", price: 20},{name: "orage", price: 30}
])# 用循环一次插入多条数据
for(var i=1;i<100;i++){db.fruit.insert({name: "apple"+i, price: i})
};
# 查看记录的条数
db.fruit.find().count()

(2)查数据 find

#【 fruit 是我的 test 数据库中的一个集合 】# 2. 查询集合中的数据(find相当于SQL中的SELECT,find返回的是游标)
# 查询集合中的所有记录
db.fruit.find()
# 查询集合中的第一条记录
db.fruit.findOne()
# 单条件查询
db.fruit.find({"name":"apple"})
# 多条件and查询
db.fruit.find({“name”:"apple", “price”:"10"})
# 多条件and查询的另一种形式
db.fruit.find({$and:[{"name":"apple"},{“price”:"10"}]})
# 多条件or查询
db.fruit.find({$or:[{"name":"apple"},{“name”:"mongo"}]})
db.fruit.find({$or:[{"name":"apple"},{“price”:"20"}]})
# 按正则表达式查询
db.fruit.find({"name":/^b/})

查询条件对照表:

SQL MQL
a=1 {a: 1}
a<>1 {a: {$ne: 1}}
a>1 {a: {$gt: 1}}
a>=1 {a: {$gte: 1}}
a<1 {a: {$lt: 1}}
a<=1 {a: {$lte: 1}}
a=1 AND b=1 {a: 1, b: 1} 或 {$and: [{a: 1}, {b: 1}]}
a=1 OR b=1 {$or: [{a: 1}, {b: 1}]}
a IS NULL {a: {$exists: false}}
a IN (1, 2, 3) {a: {$in: [1, 2, 3]}}
a NOT IN (1, 2, 3) {a: {$nin: [1, 2, 3]}}
# 查询 age>22 的记录
db.user.find({“age”: {$gt:22}})
# 查询 age<22 的记录
db.user.find({“age”: {$lt:22}})
# 查询 age>=23 的记录
db.user.find({“age”: {$gte:23}})
# 查询 age>=23 且 age<=26 的记录
db.user.find({“age”: {$gte:23, $lte:26}})# 搜索
#【模糊查询】查询name中包含 mongo 的数据
db.user.find({name:/mongo/})
#【模糊查询】查询name中以 mongo 开头的数据
db.user.find({name:/^mongo/})
#【模糊查询】查询name中以 mongo 结尾的数据
db.user.find({name:/mongo$/})# 查询指定字段的数据
db.user.find({},{name:1,age:1})    # 查找结果只显示name字段和age字段# 排序
db.user.find().sort({age:1})       # 按年龄升序排序,1代表升序
db.user.find().sort({age:-1})      # 按年龄降序排序,-1代表降序# 查询前5条数据
db.user.find().limit(5)
# 查询10条以后的数据
db.user.find().skip(10)
# 查询第3条到第4条数据
db.user.find().skip(2).limit(2)# 分页,limit是pageSize,skip是(page-1)*pageSize
# 查询第一页数据(pageSize=10)
db.user.find().skip(0).limit(10)
# 查询第二页数据(pageSize=10)
db.user.find().skip(10).limit(10)
# 查询第七页数据(pageSize=10)
db.user.find().skip(60).limit(10)# 统计
# 查询user中的记录条数
db.user.find().count()
# 查询某个结果集的条数
db.user.find({“age”: {$gte:23}}).count()

查询逻辑运算符:

$lt          存在并小于
$lte        存在并小于等于
$gt         存在并大于
$gte       存在并大于等于
$ne        不存在或存在但不等于
$in         存在并在指定数组中
$nin       不存在或不在指定数组中
$or         匹配两个或多个条件中的一个
$and      匹配全部条件

  • 使用find查询子文档数据:
# 使用find查询子文档数据# 先删除fruit集合
db.fruit.drop()
# 再新建fruit集合并插入一条记录
db.fruit.insertOne({name: "apple",from:{country: "China", province: "Guangdon"}
})
# 【正确查询子文档方式】查询子文档 from.country
db.fruit.find({"from.country":"China"})
# 【错误查询子文档方式】查询文档中有一个from字段,字段值为{country:"China"}
db.fruit.find({"from":{country:"China"})
  • 使用find搜索数组:
# 使用find搜索数组中的元素# 先删除fruit集合
db.fruit.drop()
# 再新建fruit集合并插入两条记录
db.fruit.insert([{"name":"Apple", "color":["red","green"]},{"name":"Mango", "color":["yellow","green"]}
])
# 查询出color数组中有red这个词的记录
db.fruit.find({"color":"red"})
# 查询出color数组中有red或者yellow的记录
db.fruit.find({$or: [{"color":"red"},{"color":"yellow"}]})
  • 使用find搜索数组中的对象:
# 使用find搜索数组中的对象# 新建movies集合并插入一条数据
db.movies.insertOne({"title": "Raiders of the Lost Ark","filming_locations": [{"city": "Los Angeles","state":"CA","country": "USA"},{"city": "Rome","state": "Lazio","country": "Italy"},{"city": "Florence","state": "SC","country": "USA"}]
})
# 【单条件】查找城市是Rome的记录
db.movies.find({"filming_locations.city": "Rome"})
# 【多条件】若在数组中搜索子对象的多个字段时,必须要使用$elemMatch,表示必须是同一个子对象满足多个条件
db.movies.find({"filming_locations": {$elemMatch: {"city":"Los Angeles","country": "USA"}}
})
  • 投影(projection):控制find返回的字段
# find可以指定要返回的字段和不返回的字段,0表示不返回,1表示返回
# _id字段是默认返回的,可以指定其为0让其不返回
# 返回的字段中不返回_id,返回title
db.movies.find({},{"_id":0,"title":1})
  • 让查询结果的显示变友好:
# .pretty()可以格式化查询结果
db.fruit.find().pretty()

(3)删数据 remove

注意:remove命令需要配合查询条件适用,若未指定查询条件则会删除所有文档。

#【 fruit 和 movies 是我的 test 数据库中的集合 】# 3. 删除集合中的数据# 删除所有name为Apple的记录
db.fruit.remove({"name":"Mango"})
# 只删除一条name为Apple的记录
db.fruit.remove({"name":"Mango"},{justOne:true})# 删除集合中的所有数据
#【正确写法】删除集合中的所有记录
db.movies.remove({})
#【错误写法】若不给remove传{}会报错
db.movies.remove()

(4)改数据 update

#【 fruit 和 movies 是我的 test 数据库中的集合 】# 4. 更新集合中的数据(既可以用于修改数据,也可以用于新增字段)
# 查询name为Apple的记录,将其from更新为China
db.fruit.update({"name": "Apple"}, {$set: {"from": "China"}})
db.fruit.update({"name": "Apple"}, {$set: {"price": 120}})
#【错误写法】千万不要这样写,会报错!!!
db.fruit.update({"name":"Apple"},{"from":"China"})# 更新多条数据
db.fruit.update({"name": "Apple"}, {$set: {"from": "China"}}, {multi: true})
  • 使用update/updateOne表示无论条件匹配多少条记录,始终只更新第一条。
  • 使用updateMany表示条件匹配多少条就更新多少条。
  • update/updateOne和updateMany方法要求更新条件必须具有以下内容之一,否则报错:
条件 作用
$set

添加或修改相应的对象

Note:若不写$set则表示直接用后面的数据替换这条记录的数据

$unset 删除相应的对象
$push 添加一个对象到数组底部
$pushAll 添加多个对象到数组底部
$pop 从数组底部删除一个对象
$pull 如果匹配指定的值,就从数组中删除相应的对象
$pullAll 如果匹配指定的值,就从数组中删除相应的对象
$addToSet 如果不存在则增加一个值到数组

(5)删除集合 drop 、删除数据库 dropDatabase

集合中的全部文档都会被删除,集合相关的索引也会被删除。

# 删除fruit集合
db.fruit.drop()
# 查看当前数据库所有集合
show collections# 查看当前数据库是哪个
db
# 删除数据库【小心删除!!!!!删库跑路!!!无法恢复!!!】
db.dropDatabase()
# 查看MongoDB所有数据库
show dbs

参考文章:MongoDB高手课学习笔记(一,再入门)_君陌先生的博客-CSDN博客_mongodb 高手课这是极客时间-MongoDB高手课的学习笔记,第一章:再入门.按照数据库排名网站db-engines.com的统计,最近几年MongoDB一直保持在前四五名,前面几位是年龄30多岁的关系型数据库(Oracle,Mysql,SQLServer,PostgreSQL).https://blog.csdn.net/weixin_42008012/article/details/108092240?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3《MongoDB高手课》学习记录(第二天) - SegmentFault 思否安装 windows 版本的时候,有一个安装 MongoDB Compass 的选项,如果你选了,恭喜你,125M包,就本地这下载速度,能下个几个小时。https://segmentfault.com/a/1190000021356180?utm_source=sf-similar-article

《MongoDB高手课》学习记录(第十天) - SegmentFault 思否可能是之前的理解有问题,昨天看了一下官方文档,通过brew是可以直接安安装MongoDB Community的最新版本的。当然企业版本是没啥办法,还得下载压缩包,然后自己配置。https://segmentfault.com/a/1190000021429384?utm_source=sf-similar-article

《MongoDB高手课》学习记录(第十一天) - SegmentFault 思否第十一天 今天继续CRUD部分的复习。 查询数据 昨天还遗留3个内容没复习,今天补上 查询 null 值 生成几条测试数据 {代码...} 如果下面这样写,除返回值是 null 的文档之外,还返回不包含 item 字段的文档。 {代码...} 那么,如果我只想返回值是 null 的数据呢? {代码...} $type 为 10 表示的是MongoDB内置类型为 null,...https://segmentfault.com/a/1190000021435623?utm_source=sf-similar-article
《MongoDB高手课》学习记录(第十二天) - SegmentFault 思否写在前面 今天是第一章复习的最后一个部分,聚合的内容。课程中关于聚合的内容讲的不多,今天主要参考一些官方文档的例子。 第十二天 复习一下关于聚合的知识 聚合就是处理类似group by,as,left join等的操作,通过对集合中数据的梳理来输出需要的数据 聚合可以作用在多个集合上 聚合运算的过程叫做Pipeline,Pipeline...https://segmentfault.com/a/1190000021444782?utm_source=sf-similar-article

MongoDB增删改查基础操作相关推荐

  1. java mongodb 增删改查_java操作mongodb:基本的增删改查

    java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...

  2. [Android] SQLite数据库之增删改查基础操作

        在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Un ...

  3. Mongodb增删改查高级操作

    MongoDB中常见数据类型 Object ID Integer Double Arrays:数组或列表,多个值存储到一个键 Object:嵌入式文档,一个值为一个文档 Null Timestamp ...

  4. MongoDB 增删改查

    MongoDB 增删改查 学习目标: 学习内容: 使用步骤 数据库 创建数据库 删除数据库 集合 创建集合 删除集合 文档 查找文档 使用 find()查找文档 使用 findOne()查找文档 使用 ...

  5. 数据库——MongoDB增删改查

    MongoDB增删改查操作 本文包含对数据库.集合以及文档的基本增删改查操作 数据库操作 #1.增 use config #如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库.#2. ...

  6. MYSQL数据库 增删改查基础语句

    MYSQL数据库 增删改查基础语句 **********************DDL 语句 *********************   ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...

  7. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  8. php xml 增删改查,PHP实现对xml进行简单的增删改查(CRUD)操作示例

    本文实例讲述了PHP实现对xml进行简单的增删改查(CRUD)操作.分享给大家供大家参考,具体如下: 假如有下面xml文件: 55.8 56 40 339 如何使用php对它进行CRUD?其实像这种简 ...

  9. python单链表操作_单链表的创建、增删改查等操作(Python实现)

    单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...

最新文章

  1. Oracle数据库名与Oracle实例名的关系
  2. C#垃圾回收(GC)
  3. 编译FreeNOS报/usr/lib/grub/i386-pc/modinfo.sh doesn‘t exist错误
  4. 戴维·阿克:品牌如何避免陷入竞争…
  5. 十、Python第十课——字典的些许知识(重点)
  6. gui界面如何和内核链接 python_专栏 | 除了内核程序,Abaqus还能这样做二次开发...
  7. 天翼校园网电脑端实现共享WiFi,解决一机一账号上线的问题! 亲测有效!!!
  8. 电脑横机服务器维修,三招搞定电脑横机维修
  9. linux zen 补丁,Mageia 7.1 发布,修复AMD Zen 2支持
  10. opengl+qt+vs学习笔记1:软件下载安装以及配置
  11. ios开发swift_10位Swift和iOS开发大师
  12. 微信客服crm系统多客服聊天源码分享
  13. FireEye 网络攻击危害红队安全工具
  14. 并联机构逆运动学用MapleSim符号来解决
  15. 产品-Axure9英文版,轮播图效果
  16. Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序
  17. 加盟汉庭酒店,后疫情时代稳健的投资方式
  18. CDR都特价了,你还用破解版?
  19. Sunday算法java实现
  20. Python算法- 剪绳子

热门文章

  1. 审稿人意见回复 Response to revierwers (Updating)
  2. phpcms v9 邀请用户注册自动获取积分奖励
  3. 2013年10月高等教育考试电子商务与电子政务试题
  4. 团购网站8月份用户普及率淘宝聚划算最高
  5. Description 现举行新生歌手大赛,评分规则是这样的:一共有10个评委给每个歌手打分,分数采用 百分制,算分时去掉一个最高分,去掉一个最低分,取其余8个评委的平均分作为歌手的 得分。现有多个歌
  6. 日本互联网行业为什么被中国碾压
  7. 幽美塔罗牌占卜:2020年你还有机会脱单吗
  8. 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版
  9. Switch语句流程图
  10. 耀辉:医院网络营销之站外合作篇