MongoDB的使用
MongoDB - NoSQL 不仅仅只是数据库 - 文件型数据库
非关系型数据库,不仅仅是数据库。为什么这么说呢,MongoDB不仅仅只是数据库,还可以用作缓存数据。但是有Redis在,缓存通常用Redis来做。同时,他也是文件型数据库。
使用里不存在的对象,即创建该对象。
常见端口
FTP | 2021 | 20通常为数据端口,但是可以改用其他端口;21通常用作控制端口。 |
ssh | 22 | |
HTTP | 80 | |
Redis | 6379 | |
MongoDB | 27017 |
MongoDB常见命令
MongoDB 启动服务
mongod --dbpath=C:datadb # 修改数据的存储位置。如果临时修改存储位置,则输入mongod --dbpath=C:datadb;如果永久修改数据的存储位置,则在配置文件中修改相应的配置文件
MongoDB 连接服务
mongo # 连接服务端
操作
查看所有数据库
show dbs # 查看所有数据库
当数据库为新创建的并且没有写入过数据时,则使用show dbs命令是看不到的;当写入过一次以后,不管该数据库是否为空,都可以使用show dbs命令查到。
查看当前使用的数据库
db # 查看当前使用的数据库
切换数据库
use local # local为数据库名称
当local存在时,就切换到这个数据库;当local不存在时,就创建这样一个数据库,然后切换进去。
增
第一种: 不推荐。可以使用,但是效率低下。
db.userinfo.insert({'id': 1, 'name': 'longda', 'age': 18}) # userinfo为表名
第二种:官方推荐,效率高。
// 插入一条数据 db.userinfo.insertOne({name: 'LongDa', age:18}) // 插入多条数据 db.userinfo.insertMany([{name: 'LongDa', age: 19}, {name: 'LongFei', age: 20}])
相较于第二种方式,不管第一种方式时插入一条数据还是多条数据都会比第二种方式慢很多。
当 userinfo存在时,直接往里边写入要插入的数据;当userinfo不存在时,先创建这个表格,然后再往里边插入需要插入的数据。
删
清空表中的内容
第一种按:现在官方不推荐了
db.userinfo.remove({}) # 清空表格userinfo中的内容,括号中必须写上大括号
当条件为空时,删除表中的所有的数据;当有条件时,删除符合条件的所有的数据。
第二种:
db.userinfo.deleteOne({name: 'LongDa'}) // 删除一条数据
删除表
db.userinfo.drop() # 删除表格userinfo
当删除的这个表完成以后,数据库中没有其他表格了,那么,当前这个数据再用show dbs命令查询时,则再查询不到。
改
第一种:官方不推荐。
db.userinfo.update({}, {$set:{}}) # 第一个写条件,第二个写改的目标内容
第二种:
修改一条数据
db.userinfo.updateOne({age: 20},{$set:{name: 'Ta'}}) // 将age为20的数据的名字修改为‘Ta’
当有多个条件符合时,修改第一条记录。
修改多条数据
db.userinfo.updateMany({age: {$gt: 18}},{$set:{age: 20}}) // 将age大于18的记录的age都设置为20
查
查看表
show tables # 查看表
查看当前数据库中的所有表格。
查看表中的数据
查询所有数据
db.userinfo.find({字段:条件}) # userinfo为表名
当不写条件即只有一对大括号{}时,表示查看userinfo表中的所有数据;当写入条件以后,就表示查询所有符合条件的数据。
查询一条数据
db.userinfo.findOne({age: 18}) # 查询一条数据
其返回结果为一条json格式的数据。
查询符合条件的数据
$gt 大于
db.userinfo.find({age: {$gt: 18}}) # 查询年龄大于18的所有数据
$gte 大于等于
$lt 小于
$lte 小于等于
$eq 等于
$or or查询
db.userinfo.find({$or: [{name: 'Longda'}, {name: 'LongDa'}]}) #
查询至少满足二者条件之一的的数据。
{,} and查询
// and查询
db.userinfo.find( { age: {$gt: 18}, name: 'LongDa' } )
当连个条件都满足时才能出现结果。
$in 在这个条件集合里的至少一个条件
db.userinfo.find({'name': {$in: ['Longda', 'LongFei']}}) // 查询name为‘Longda’或者‘LongFei’的数据
$all 查询满足所有列出的条件的数据,不分条件的先后顺序。
db.userinfo.find({'ghobby': {$all: [3, 5, 2, 4]}}) // 查询ghoby中包含2/3/4/5的数据
MySQL与MongoDB的对应关系
MySQL | MongoDB |
DB | DB |
table | Collections |
row | Documents |
column | Field |
MongoDB的数据类型
Object ID
自动生成的一个唯一的ID。
ObjectId("5c21e8bae6ac082d78f29e43"),其中5c21e8bae6ac082d78f29e43为object中的值。
5c21e8ba(前8位)代指的是产生这条记录的准确时间戳时间。
e6ac08(接下来6位)代指的是存放数据的当前机器的机器码。
2d78(接下来的4位)代指的是进程ID,多进程存储数据的时候,非常有用的。
f29e43(最后6位)代指计数器,它计的是这台机器的数,是不是同一个数据库不影响,按时间顺序依次增加计数值。
String
字符串,必须是utf-8。
Boolean
布尔值,true或者false。不区分大小写。
在诸多语言中,只有Python中的True/False需要首字母大写,这点需要注意。
Integer
整数。分为int32和int64两种。int32为正负21亿,超过正负21亿的就需要使用int64。
Dobule
浮点数,双精度类型,比float的精度高出很多很多。在MongoDB中没有float类型,这里引用的float是其他语言中的数据类型做比较的。
Array
数组或者列表,相当于python中的列表。
Object
对象,相当于Python中的字典。
Null
空数据类型,
Timestamp
时间戳
Date