MongoDB简单介绍及使用
1. MongoDB 安装配置
MongoDB启动 - cmd - 默认27017 监听端口
;3306 Mysql;6379 Redis
mongod
- 启动MongoDB服务数据库存放路径:默认为
C:/data/db
,可以通过--dbpath = "D:/data/db"
更改数据库存放路径;--port
更改监听端口# 启动mongodb服务器 C:\mongodb\bin\mongod --dbpath c:\data\db
mongo
启动客户端# 命令示例: C:\mongodb\bin\mongo.exe
也可以通过服务方式启动MongoDB:
安装MongoDB服务:
通过执行mongod.exe,使用–install选项来安装服务,使用–config选项来指定之前创建的配置文件。
C:\mongodb\bin\mongod.exe --config "C:\mongodb\mongod.cfg" --install
要使用备用 dbpath,可以在配置文件(例如:C:\mongodb\mongod.cfg)或命令行中通过 –dbpath 选项指定。
如果需要,您可以安装 mongod.exe 或 mongos.exe 的多个实例的服务。只需要通过使用
--serviceName
和--serviceDisplayName
指定不同的实例名。只有当存在足够的系统资源和系统的设计需要这么做。启动MongoDB服务
net start MongoDB
关闭MongoDB服务
net stop MongoDB
移除 MongoDB 服务
C:\mongodb\bin\mongod.exe --remove
2. MongoDB 中的概念
MongoDB是一种开源的文档型数据库管理系统(DBMS),广泛用于Web应用程序的后端数据存储和管理。与传统的关系型数据库不同,MongoDB采用了面向文档的数据模型,使用类似JSON的BSON(Binary JSON)格式来存储数据。它支持灵活的数据结构,可以存储和查询复杂的文档和嵌套数据。MongoDB还具有高性能、可扩展性和可用性,适用于大型和高负载的应用程序。
原文链接:https://blog.csdn.net/javamyfriend/article/details/132246620
使用了不存在的对象即创建该对象
JSON结构存储
Mysql | MongoDB | 解释/说明 |
---|---|---|
database | database | 数据库 |
tables | collections | 数据库表/集合 |
colum | field | 数据字段/域 |
row | documents | 行数据记录行/文档 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
3. MongoDB 的数据类型
字段 | 介绍 |
---|---|
ObjectID | Documents 自生成的 _id # 自增ID 全世界唯一的计数ID |
String | 字符串,必须是utf-8 |
Boolean | 布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写) |
Integer | 整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32) |
Double | 浮点数 (没有float类型,所有小数都是Double) |
Arrays | 数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦) |
Object | 如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典 |
Null | 空数据类型 , 一个特殊的概念,None Null |
Timestamp | 时间戳 |
Date | 存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型) |
4.数据库的创建与删除
创建数据库
当你使用 use 命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它。
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME # 如果数据库不存在,则创建数据库,否则切换到指定数据库。
查看当前使用的数据库
db
查看所有数据库
show databases # or show dbs
创建集合(数据表)
在 MongoDB 中,你不需要创建集合,当你插入一些文档时,MongoDB 会自动创建集合。
use myNewDatabase db.createCollection("myNewCollection")
查看已有集合
show collections # or show tables
删除集合或数据库
use myDatabase db.mycollname.drop() # 删除集合 db.dropDatabase() # 删除数据库
注意事项:
- 数据库名不能包含空格、点(.)或美元符号($)。
- 数据库的创建是自动的,不需要显式创建,除非你需要在创建时指定特定的配置选项。
- 在MongoDB中,只有在数据库中至少有一个集合时,数据库才会在
show dbs
命令的输出中显示。
# 注意:
use 不存在的数据库名,居然切换成功了,且db查看到了当前错误的数据库名。是因为实际在内存中进行了创建,而show databases和tables查看的是磁盘空间
db.users 在一个不知道存在不存在的数据库中创建了一个不知道存在不存在的users表
当数据表中存在数据,数据库及数据表均会写入到磁盘中
4. MongoDB 的增删改查
增加:
db.tablename.insert({字段:"值"})
# 例如:db.users.insert({name:"nihao"})
官方推荐:
db.tablename.insertOne({name:"nihao"}) # 增加一条数据
db.tablename.insertMany([{name:"niaho"},{name:"niaho"}]) # 增加多条数据
db.tablename.save(): # 类似于 insertOne()。如果文档存在,则该文档会被更新;如果文档不存在,则会插入一个新文档。
删除
db.Tables.remove({}) 删除所有符合条件的数据
db.tablename.deleteOne({查询条件}) 删除符合条件的第一条数据
db.tablename.deleteMany({查询条件}) 删除所有符合条件的数据
修改
$修改器
$set 强制将谋值修改覆盖
$unset 强制删除一个字段
$inc 引用增加
针对$array的修改器 以及 $关键字的用法和特殊性
$push 在array中追加数据
$pushAll 在Array中批量增加数据 [] == list.extends
$pull 删除符合条件的所有元素
$pop 删除array中第一条或最后一条数据
$pullAll 批量删除符合条件的元素 []
修改示例
db.users.update({name:"nihao"},{"$set":{name:"DSB"}})
db.tablename.update({查询符合条件的数据},{$修改器:{修改的内容}})
修改符合查询条件的第一条数据
# 单个字段 进行修改
# $set 强制将谋值修改覆盖
db.users.update({name:"DSB"},{"$set":{age:73,gender:1}})
# $unset 强制删除一个字段
db.users.update({age:73},{"$unset":{gender:0}})
# $inc 引用增加
db.users.update({name:"DSB"},{"$inc":{age:1}})
db.users.update({name:"DSB"},{"$inc":{age:-2}})
针对$array的修改器 以及 $关键字的用法和特殊性
Array是list 列表类型
list -> append remove pop extends
Array -> $push $pull $pop $pushAll $pullAll
$push 在array中追加数据
db.users.update({name:"MJJ"},{"$push":{"hobby":"抽烟"}})
# $pushAll 在Array中批量增加数据 [] == list.extends
db.users.update({name:"MJJ"},{"$pushAll":{"hobby":["喝酒","烫头"]}})
# $pull 删除符合条件的所有元素
db.users.update({name:"MJJ"},{"$pull":{"hobby":"烫头"}})
# $pop 删除array中第一条或最后一条数据
db.users.update({name:"MJJ"},{"$pop":{"hobby":1}}) 正整数为,删除最后一条数据
db.users.update({name:"MJJ"},{"$pop":{"hobby":-1}}) 负整数为 删除第一条数据
# $pullAll 批量删除符合条件的元素 []
db.users.update({name:"MJJ"},{"$pullAll":{"hobby":[3,4,5]}})
$关键字 的特殊用法
储存符合条件的元素下标索引 - 只能存储一层遍历的索引位置
$ = 9
db.users.update({"hobby":10},{"$set":{"hobby.$":0}})
# 官方推荐:
db.tablename.updateOne({},{}) # 修改符合条件的第一条数据
db.tablename.updateMany({},{}) # 修改符合条件的所有数据
查询
$选择器:
$and 并列
$or 或者
$in 包含或者 同一字段 或者条件
$all 子集或者 必须是子集 绝对不可以超集 交集是不可查询的
示例:
# 简单查:
db.tablename.find() # 查找当前数据表中的所有数据
{ "_id" : ObjectId("5d50bdd1399ab50efdf765de") }
{ "_id" : ObjectId("5d50be7c399ab50efdf765df"), "name" : "nihao" }
db.tablename.findOne({}) # 查询符合条件的第一条数据
db.tablename.find({}) # 查询符合条件的所有数据
# 高级查:
db.users.find({age:999}) # 查询所有age=999的数据
# 查询符合条件的所有数据
db.users.find({age:999,name:"alex"}) # 并列条件
db.users.find({"$and":[{name:"wpq"},{age:1000}]}) # $and 并列
db.users.find({"$or":[{age:1000},{name:"alex"}]}) # $or 或者
# age 或者等于 999 或者等于 1000
db.users.find({"age":{"$in":[999,1000]}}) # $in 包含或者 同一字段 或者条件
# $all 子集或者 必须是子集 绝对不可以超集 交集是不可查询的
db.users.find({"hobby":{"$all":[5,1,3]}})
# 如果查询 _id 那么 数据的值必须带上 ObjectId 的数据类型
db.Users.find({"_id":ObjectId("5d50e778b2a72712f5ee54c5")})
Object查询时可以直接使用 对象.属性 的方式作为Key
当Array中出现了Object 会自动遍历 Object中的属性
5. MongoDB 高级函数
三种高级函数:
排序 | 筛选 | 跳过 |
---|---|---|
sort | limit | skip |
用法示例:
排序:
db.users.find({}).sort({age:-1}) 依照age字段进行倒序
db.users.find({}).sort({age:1}) 依照age字段进行正序
筛选:
db.users.find({}).limit(4) 筛选前4条数据
跳过:
db.users.find({}).skip(3) 跳过前3条数据 显示之后的所有数据
分页
1.排序 2.跳过 3.筛选
page = 页码 = 1
count = 条目 = 2
db.users.find({}).limit(2).skip(2).sort({ age:-1 })
limit = count
skip = (page-1) * count
db.users.find({}).limit(count).skip((page-1)*count).sort({ age:-1 })