mongodb基本增删改查操作

mongodb

  • MYSQL的默认端口号:3306

  • Mongodb的默认端口号:27017

    NOSQL 非关系型数据库管理系统

    用于超大规模的数据存储(eg:谷歌,Facebook)不需要固定的模式,无需多余操作就可以横向扩展

什么是MongoDB?

由C++编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多节点,可以保证服务器性能。

  • 为WEB应用提供可扩展的高性能数据存储解决方案
  • mongoDB数据存储为一个文档,数据结构由键值(key=>value)对组成
  • mongoDB文档类似于JSON对象,字段值可以包含其他文档,数组及文档数组

概念解析

SQL MongoDB 解释说明
table collection 集合
row(一行,一条记录) document 文档
column field 域(键值对)
index index 索引
table joins 不支持表格连接查询
primary key primary key 主键,mongoDB自动将_id字段设置为主键

数据库

db。不同的数据库放在不同文件里面

show dbs 可以显示所有数据库的列表

数据库名:

不能是字符串(“”),不能有空格,.,,/,\0(空字符)最好不要使用中文(可能会出现中文乱码问题),全部小写,最多64字节

文档:

键值对,BSON

{”site":"xxxxx","age":25}
数据库服务和客户端
MYSQL/Oracle mongod

注意:

  • 文档中的键值对是有序的
  • 区分类型和大小写
  • 不能有重复的键,
  • 键:字符串(utf-8),不能含有空字符
  • . $ 有特殊的含义,只有在特定环境下才使用
  • _开头的键是保留的(不是严格要求的)

object

onject_id可以是任何类型的,一般默认为object类型

onject_id 中保存了创建的时间戳,所以不需要自己创建时间戳(timestap)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpPiTmmw-1611392732234)(C:\Users\jry\AppData\Roaming\Typora\typora-user-images\image-20210123134431496.png)]

通过getTimestap函数来获取文档的创建时间

通过str来转换为字符串形式

日期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqoE0EMq-1611392732240)(C:\Users\jry\AppData\Roaming\Typora\typora-user-images\image-20210123134725981.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBUxv13Z-1611392732243)(C:\Users\jry\AppData\Roaming\Typora\typora-user-images\image-20210123134808410.png)]

MongoDB的基本操作

一、创建数据库

use xxx

在这里插入图片描述

但是数据库里面没内容,插入内容后就会显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYqDZ4K6-1611392732249)(C:\Users\jry\AppData\Roaming\Typora\typora-user-images\image-20210123135240492.png)]

二、删除数据库

db.dropDatabase()

切换到别的数据库才可以看到被删除了
在这里插入图片描述

三、创建集合

  • db.createCollection(“employee”) 创建一个employee的集合
  • db.mycol(集合名).insert({"_id":01,“name”:“马云”}) 直接插入,本来没有集合会自动创建一个mycol的集合
  • show collections 显示数据库下面的集合
  • db 查看当前的数据库

在这里插入图片描述

四、删除集合

db.tc(集合名).drop()
在这里插入图片描述

五、给集合中插入文档

db.集合名.insert(文档) 如果_id存在则抛出主键异常,不保存当前数据

db.集合名.save(文档) 如果_id存在则更新数据,如果不存在就插入数据

插入一条记录

var 文档名 = db.集合名.insert({插入的键值对内容})

在这里插入图片描述

插入多条记录

var 文档名 = db.集合名.insertOne({})

在这里插入图片描述

插入多个文档

var 文档名 = db.集合名.insertMany({})

在这里插入图片描述

在这里插入图片描述

插入数组

1.先创建一个数组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、文档的更新

db.集合名.updata(

{query–查询条件}

upsert–true:如果不存在就插入,存在就更新,false:不更新

{$set"{更新的值}}—更新为什么值

multi:true/false—true:更新所有符合条件的值,false:只更新第一个符合条件的值

)

更新一个值

db.employee.update({“sex”:“男”},{$set:{“age”:18}})

在这里插入图片描述

凡是符合条件的全部更新

db.employee.update({“sex”:“男”},{$set:{“age”:18}},{multi:true})

在这里插入图片描述

七、文档查询

1.条件符
$gt >
$gte >=
$lt <
$lte <=
$ne !=
$eq 、=

查询年龄小于19的记录

在这里插入图片描述

查询年龄小于等于19的记录

在这里插入图片描述

查询年龄小于30,地址在延安的

db.employee.find({“age”:{$lt:20},“address”:“延安”})

在这里插入图片描述

2.AND OR条件符

AND

db.employee.find({'KaTeX parse error: Expected '}', got 'EOF' at end of input: and':[{"age":{ lt:20}},{“address”:“延安”}]})

在这里插入图片描述

‘$and’–与关系符

[{条件1},{条件2}]

OR

db.employee.find({'KaTeX parse error: Expected '}', got 'EOF' at end of input: or':[{"age":{ lt:20}},{“address”:“延安”}]}))
在这里插入图片描述
db.employee.find({"KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"女"},{"age":{ gt:10}}]})

性别为女,年龄>10

robo 3T上查询

在这里插入图片描述

AND 和 OR 联合使用

先与再或

db.employee.find({“sal”:{ KaTeX parse error: Expected 'EOF', got '}' at position 9: gt:17000}̲,'or’:[{“sex”:“女”},{“address”:“延安”}]})

db.employee.find({“sal”:{ KaTeX parse error: Expected 'EOF', got '}' at position 9: gt:19000}̲,"or":[{“sex”:“女”},{“address”:“延安”}]})

在这里插入图片描述

db.getCollection('employee').find({"age":{$lt:30},"address":"郑州"})db.employee.find({"age":{$lt:30},"address":"郑州"})

//查询age小于30并且地址是郑州的document
db.employee.find({'$and':[{"age":{$lt:30}},{"address":"郑州"}]}) db.getCollection('employee').find({})

//查询age小于30或address是洛阳document
db.employee.find({'$or':[{"age":{$lt:30}},{"address":"洛阳"}]}) 

//查询sex为女或address是南京的document
db.employee.find({'$or':[{"sex":"女"},{"address":"南京"}]})  

// (price>70 and (publish="机械工业出版社" or public="新疆儿童出版社"))
db.db_book.find({"price":{$gt:70},'$or':[{"publish":"机械工业出版社"},{"publish":"新疆儿童出版社"}]})

八、模糊查询

  • /内容/
  • /^以什么开头/
  • /以什么结尾$/

name中含有蒋字的

db.employee.find({“name”:/蒋/})

在这里插入图片描述

name中以马字开头的

db.employee.find({“name”:/^马/})

在这里插入图片描述

name中以依字结尾的

db.employee.find({“name”:/依$/})

在这里插入图片描述

九、删除文档

db.集合名.remove({指定条件})

db.employee.remove({_id:1002})  删除_id为1002的文档

db.集合名.remove(删除条件,1)

db.employee.remove({name:/诸/},1)  删除名字中有诸的,并且只删除一个文档

name中以依字结尾的

db.employee.find({“name”:/依$/})

猜你喜欢

转载自blog.csdn.net/rraxx/article/details/113058327