MongoDB增删改查基础操作
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增删改查基础操作相关推荐
- java mongodb 增删改查_java操作mongodb:基本的增删改查
java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...
- [Android] SQLite数据库之增删改查基础操作
在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Un ...
- Mongodb增删改查高级操作
MongoDB中常见数据类型 Object ID Integer Double Arrays:数组或列表,多个值存储到一个键 Object:嵌入式文档,一个值为一个文档 Null Timestamp ...
- MongoDB 增删改查
MongoDB 增删改查 学习目标: 学习内容: 使用步骤 数据库 创建数据库 删除数据库 集合 创建集合 删除集合 文档 查找文档 使用 find()查找文档 使用 findOne()查找文档 使用 ...
- 数据库——MongoDB增删改查
MongoDB增删改查操作 本文包含对数据库.集合以及文档的基本增删改查操作 数据库操作 #1.增 use config #如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库.#2. ...
- MYSQL数据库 增删改查基础语句
MYSQL数据库 增删改查基础语句 **********************DDL 语句 ********************* ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...
- php xml 增删改查,PHP实现对xml进行简单的增删改查(CRUD)操作示例
本文实例讲述了PHP实现对xml进行简单的增删改查(CRUD)操作.分享给大家供大家参考,具体如下: 假如有下面xml文件: 55.8 56 40 339 如何使用php对它进行CRUD?其实像这种简 ...
- python单链表操作_单链表的创建、增删改查等操作(Python实现)
单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...
最新文章
- Oracle数据库名与Oracle实例名的关系
- C#垃圾回收(GC)
- 编译FreeNOS报/usr/lib/grub/i386-pc/modinfo.sh doesn‘t exist错误
- 戴维·阿克:品牌如何避免陷入竞争…
- 十、Python第十课——字典的些许知识(重点)
- gui界面如何和内核链接 python_专栏 | 除了内核程序,Abaqus还能这样做二次开发...
- 天翼校园网电脑端实现共享WiFi,解决一机一账号上线的问题! 亲测有效!!!
- 电脑横机服务器维修,三招搞定电脑横机维修
- linux zen 补丁,Mageia 7.1 发布,修复AMD Zen 2支持
- opengl+qt+vs学习笔记1:软件下载安装以及配置
- ios开发swift_10位Swift和iOS开发大师
- 微信客服crm系统多客服聊天源码分享
- FireEye 网络攻击危害红队安全工具
- 并联机构逆运动学用MapleSim符号来解决
- 产品-Axure9英文版,轮播图效果
- Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序
- 加盟汉庭酒店,后疫情时代稳健的投资方式
- CDR都特价了,你还用破解版?
- Sunday算法java实现
- Python算法- 剪绳子
热门文章
- 审稿人意见回复 Response to revierwers (Updating)
- phpcms v9 邀请用户注册自动获取积分奖励
- 2013年10月高等教育考试电子商务与电子政务试题
- 团购网站8月份用户普及率淘宝聚划算最高
- Description 现举行新生歌手大赛,评分规则是这样的:一共有10个评委给每个歌手打分,分数采用 百分制,算分时去掉一个最高分,去掉一个最低分,取其余8个评委的平均分作为歌手的 得分。现有多个歌
- 日本互联网行业为什么被中国碾压
- 幽美塔罗牌占卜:2020年你还有机会脱单吗
- 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版
- Switch语句流程图
- 耀辉:医院网络营销之站外合作篇