https://www.bilibili.com/video/BV1gV411H7jN/?spm_id_from=333.999.0.0&vd_source=92305fa48ea41cb7bedb3ab5e056d42d

b站mongodb的视频链接。

1,MongoDB是什么?

2,MongoDB和Redis的区别

2.1,内存管理机制

2.2,支持的数据结构

2.3,不适用场景

3,可视化工具 Robomongo

mongodb的安装和下载,我是自己在网上搜的下的,忘记在哪下的了。

打开命令: mongod ,要输入数据库命令的话,命令是:mongo

然后就可以输入数据库命令了

我在网页上下载的。连好数据库就是下图。

4,MongoDB数据库的基本操作

4.1,操作数据库

4.1.1,创建数据库

有数据的数据库会被显示出来,这里  sxt 只是被创建出来了,db可以知道当前所在的数据库。

4.1.2,查询数据库

往sxt 数据库插入数据,再去show dbs,就发现有sxt了。

在可视化工具 robo 里也可以看到

4.1.3,删除数据库

4.2,操作集合

4.2.1,创建集合(相当于mysql的表)

集合名和数据库名别重名,因为你删集合,有可能把库删了。下图是在数据库 sxt 里 创建 shsxt 的集合。

查看可视化工具

 所以上面的知道就好,不需要创建集合,下图的才是要用的。

4.2.2,删除集合

比如,删除shsxt 这个集合

查看可视化工具,发现也没有数据库 sxt 了,是因为 数据库sxt只有shsxt这一个集合,删了shsxt集合后,数据库sxt就没有数据了,也就显示不出来了,但是sxt还在。

4.3,操作文档

4.3.1,插入文档

4.3.1.1,insert

在可视化工具里输入以下内容

use sxt
user0 = {
"name":"zhangsan",
"age":18,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
} db.user.insert(user0)

可视化工具里也能看到插入的信息。

注:_id 字段,这个值必须在user集合中唯一,若不指定主键值,会自动分配一个值。

4.3.1.2,save

用save() 插入user1,指定_id 为2,看可视化工具,发现把 _id 已经改为2了,

user1 = {
"_id":2,
"name":"zhangsan",
"age":18,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.save(user1)

用save()也能实现修改,把name改成wangwu,查看robo

4.3.1.3,批量插入,insertMany

批量插入user1,user2,user3,user4,user5,我先把数据库的user集合删了,这样好看一点。

user1 = {
"_id":1,
"name":"zhangsan",
"age":1,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
user2 = {
"_id":2,
"name":"lisi",
"age":2,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SH"
}
}
user3 = {
"_id":3,
"name":"wangwu",
"age":3,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"GZ"
}
}
user4 = {
"_id":4,
"name":"zhaoliu",
"age":4,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SZ"
}
}
user5 = {
"_id":5,
"name":"tianqi",
"age":5,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"TY"
}
} db.user.insertMany([user1, user2, user3, user4, user5])

查看robo ,发现都插入了。

4.3.2,更新文档

把 name 为 lisi 的人 改成 user2,就是name和age变了,其他的没变。

user2 =  {
"name":"wangwu",
"age":20,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
} db.user.update({"name":"lisi"},user2)

在robo发现,确实改了。

注:比如修改的值只有name,age其余属性会被删除,所以改的话,要把原来的数据也加上。

如果把 _id 为2 的人改成 user2,就是把name改成 lisi,(注意看user2 和之前的user2不一样了,没有hobbies和addr)。

user2 =  {
"name":"lisi",
"age":20,
} db.user.update({"_id":2},user2)

robo里 _id为2,但是没有被修改的数据(和之前的user2相比,前提如果是我们想要没有被修改的数据存在)不见了,被删除了

4.3.2.1,再来试一下修改多条数据

我们可以插入一个user6,让user6的name为wangwu。

user6 =  {
"name":"wangwu",
"age":20,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.insert(user6)

把user集合里所有name为wangwu的人改成 wangwu666(multi 为 true),其它没有被修改的数据存在。如果不存在name为wangwu的人,就插入新的(upsert 为 true)。

改之前的

 multi必须配合$符号一起使用,否则会无效

$set修改器

$set用来指定一个键的值,如果这个键不存在,则创建它。键可以不加双引号。

db.user.update({"name":"wangwu"},{"$set":{"name":"wangwu666"}},{"upsert":true, "multi":true})

下图显示已经修改。

还可以用 updateMany

db.user.updateMany({"name":"wangwu"},{$set:{"name":"wangwu666"}})
4.3.2.2,增加和减少 $inc

$inc :将 集合中文档的字段的值增加或减少某个值

我们先把user集合删了(我是在robo里手动删的),重新插入一些数据。

user1 = {
"_id":1,
"name":"zhangsan",
"age":1,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
user2 = {
"_id":2,
"name":"lisi",
"age":2,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SH"
}
}
user3 = {
"_id":3,
"name":"wangwu",
"age":3,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"GZ"
}
}
user4 = {
"_id":4,
"name":"zhaoliu",
"age":4,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SZ"
}
}
user5 = {
"_id":5,
"name":"tianqi",
"age":5,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"TY"
}
} db.user.insertMany([user1, user2, user3, user4, user5])

年龄都减1,其中,{} 表示对集合中所有文档进行操作,同时 multi 为 true。

注意:要选中执行。

db.user.update(
{},
{$inc: {"age":-1}},
{"multi":true}
)

年龄都加10,其中,{} 表示对集合中所有文档进行操作,同时 multi 为 true。

db.user.update(
{},
{$inc: {"age":10}},
{"multi":true}
)

4.3.3,删除文档

删除集合中name为 lisi 的人,只删符合条件的第一个文档(justOne 为 true)

db.user.remove({"name":"lisi"},{justOne:true})

这里自己可以一删。

db.user.remove({})

4.3.4,查询文档

db.user.find()

db.user.distinct("name")

4.3.4.1,比较运算(=,!=  $ne,>  $gt,<  $lt,>=  $gte,<=  $lte)

查 _id 等于3,这个直接查就行

db.user.find({"_id":3})

查 _id 不等于3,用 $ne,!=

db.user.find({"_id":{$ne:3}})

查 _id 大于3,用 $gt,>

db.user.find({"_id":{$gt:3}})

查 _id 小于3,用 $lt,<

db.user.find({"_id":{$lt:3}})

查 _id 大于等于3,用 $gte,>=

db.user.find({"_id":{$gte:3}})

查 _id 小于等于3,用 $lte,<=

db.user.find({"_id":{$lte:3}})

4.3.4.2,逻辑运算($and,$or,$not,且或非,$mod  取余)

查询 _id 大于等于3,小于等于4,这个不用$and,用的是 {"$gte":3, "$lte":4} 中间的 逗号,也表示 and关系。

db.user.find({"_id":{"$gte":3, "$lte":4}})

查询 _id 大于等于3,小于等于4, age 大于等于4。注意格式,find里面是 {} 的文档。

第一种方式:

db.user.find({
"_id":{"$gte":3, "$lte":4},
"age":{"$gte":4} })

第二种方式(用$and):

db.user.find({
"$and":[
{"_id":{"$gte":3, "$lte":4}},
{"age":{"$gte":4}}
]
})

查询 _id 大于等于0,小于等于1,或者,_id大于等于4,或者,name为 tianqi  (用$or)

db.user.find({
"$or": [
{"id":{"$gte":0, "$lte":1}},
{"id":{"gte":4}},
{"name":"tianqi"}
]
})

查询 _id 取余2为1 (用 $mod)

db.user.find({
"_id":{
"$mod":[2,1]
}
})

查询 _id 取余2为1,再取反  (用 $not)

db.user.find({
"_id":{
"$not":{
"$mod": [2,1]
}
}
})

4.3.4.3,成员运算($in,$nin)

查询 age 在 1,2,3之间

db.user.find({
"age":{
"$in":[1,2,3]
}
})

查询 age 不在 1,2,3之间

db.user.find({
"age":{
"$nin":[1,2,3]
}
})

4.3.4.4,type操作符($type)

查询 name 是字符串类型的数据,从表里看到字符串类型 String 对应的数字是 2,所以 $type :2,pretty方法是为了格式化输出结果,就是易读。

db.user.find({
"name":{
"$type":2
}
}).pretty()

4.3.4.5,正则表达式

可以看这个文章       https://m.runoob.com/mongodb/mongodb-regular-expression.html

4.3.4.6,投影(0是隐藏,1是显示)

让_id 为3的人 的 _id 不显示出来,name 和 age显示出来。

db.user.find(
{"_id":3},
{"_id":0, "name": 1, "age":1}
)

4.3.4.7,查数组里的数据($all,.  下标 ,$slice,嵌入文档)

查询hobbies中有read的人

db.user.find({
"hobbies":"read"
})

这里我没展开截屏,太长了,看第一个的也可以

查询hobbies既有read又有music的人 (用 $all)

db.user.find({
"hobbies":{
"$all":["read", "music"]
}
})

查询第2个爱好为read的人(下标从0开始),结果和上图一样。

db.user.find({
"hobbies.1":"read"
})

只查看所有人的第1个到第2个爱好(用到了切片 $slice),也就是把 _id,name,age,addr 这些隐藏起来(用到了 投影 )

db.user.find(
{},
{
"_id":0,
"name":0,
"age":0,
"addr":0,
"hobbies":{"$slice":[0,1]},
})

只查看 所有人的最后两个爱好,最后两个用切片表示就是 $slice:-2

db.user.find(
{},
{
"_id":0,
"name":0,
"age":0,
"addr":0,
"hobbies":{"$slice":-2},
}
)

先看一下刚开始插入的文档,发现 "country":"China" 是嵌入文档。

user6 =  {
"name":"wangwu",
"age":20,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}

查询子文档(嵌入文档)有 "country":"China" 的人

db.user.find(
{
"addr.country":"China"
}
)

4.3.4.8,排序(sort(),1是升序,-1是降序)

按姓名升序查询

db.user.find().sort({"name":1})

4.3.4.9,分页(limit(),skip() )

取2个,跳过0个。

db.user.find().limit(2).skip(0)

同理,可以继续取2个,跳过2个

db.user.find().limit(2).skip(2)

综上,用 pageSize 表示 取几个数据,pageNum 表示 第几页,那跳过几个就可以用  pageSize * (pageNum - 1)  表示(看上面黑色背景图的规律)。

4.3.4.10,统计 ($gt 和 count() )

查询 _id 大于3的人数

db.user.find({_id:{"$gt":3}}).count()

MongoDB (操作数据库,操作集合,操作文档)的笔记的更多相关文章

  1. MongoDB数据库、集合、文档的操作

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  2. mongodb操作指令(一):数据库,集合,文档

    数据库 查看所有数据库 show dbs 查看当前数据库 db 创建使用数据库use runoob 删除数据库 db.dropDatabase() 集合 创建集合db.createCollection ...

  3. 查看sedna创建的数据库和集合,文档之类

    在sedna的安装文件夹下.看一下cfg文件夹: <pre name="code" class="plain">[xuzhina@localhost ...

  4. mongodb的数据库,集合,数据可介绍。

    我们知道,在关系型数据库里面有数据库.数据表.表里面是一行一行的数据.而mongodb是非关系型数据库,它有的是数据库.集合.文档,分别对应关系型里面的数据库.数据表.和表里面一行一行的数据.在mon ...

  5. MongoDB系列---集合与文档操作03

    MongoDB-——Collection 学习大纲: 1.集合操作 2.文档操作 知识回顾: 上一篇我们讲述了如何对MongoDB的权限和用户进行日常的基本操作,来达到我们对数据库的基本安全保障. 一 ...

  6. 3 、操作元素 (属性 CSS 和 文档处理)

    3   操作元素-属性 CSS 和 文档处理  3.1 属性操作 $("p").text()    $("p").html()   $(":check ...

  7. MongoDB(四):数据类型、插入文档、查询文档

    1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...

  8. MongoDB查询或修改内嵌文档

    作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...

  9. DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

    前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...

  10. 关于PowerDesigner导出数据库表到word文档

    关于PowerDesigner导出数据库表到word文档 一.查看全部模板: powerdesigner默觉得我们提供了非常多的模版,在工具栏中选择[Report(报告)--->Report T ...

随机推荐

  1. 【opencv】传统图像识别:hog+svm行人识别实战

    实战工具:python3.7+pycharm+opencv4.6算法知识:HOG特征提取.SVM模型构建实战目的:本次实战的目的是熟悉HOG+SVM工作流算法,初步掌握图像分类的传统算法.实战记录:本 ...

  2. API数据接口的应用步骤

    API(Application Programming Interface)是现代软件应用程序开发中的一项重要技术,它允许不同的应用程序之间进行通信和数据交换.API接口通过提供统一的访问点,使得应用 ...

  3. 原来你是这样的SpringBoot--初识SpringBootAdmin

    简介 Spring Boot Admin(SBA)是一个针对spring-boot的actuator接口进行UI美化封装的监控工具.它可以:在列表中浏览所有被监控spring-boot项目的基本信息, ...

  4. 企业级低代码平台,通用代码生成平台,Java开源项目(附源码)

    项目介绍 Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器 ...

  5. CodeIgniter 视图篇

    什么是视图 简单来说,一个视图其实就是一个 Web 页面,或者页面的一部分,像页头.页脚.侧边栏等. 实际上,视图可以很灵活的嵌在另一个视图里,然后这个视图再嵌在另一个视图里,等等, 如果你想使用这种 ...

  6. 第1章 Git概述

    第1章 Git概述 Git 是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目. Git 易于学习,占地面积小,性能极快. 它具有廉价的本地库,方便的暂存区域和多个工作流 ...

  7. numpy中的nan (无穷小)注意点

  8. SpringBoot 后端配置 Https 教程

    以阿里云为例子 1. 申请 SSL 证书 1. 注册域名 打开阿里云官网,搜索域名 点击域名注册,输入域名,点击搜索 选择心仪的域名,点击购买,打钱 进入域名控制台,进行实名认证 2. 申请 SSL ...

  9. Linux升级至glibc-2.14步骤

    Linux升级至glibc-2.14步骤 查看gcc版本命令: strings /lib64/libc.so.6 |grep GLIBC_ glibc安装 首先, 点击此处下载glibc2.14下载, ...

  10. 【FAQ】关于获取运动健康数据的常见问题及解答

    目录 一.Health Kit健康数据采样, 原子采样数据问题 二.Health Kit查询历史数据查询数据和返回数据不一致 三.Health Kit关于获取历史数据问题 四.调用Health Kit ...