大家一起进步,感谢大家的支持和关注
MongoDB
前言
- 数据库分类
- 关系型数据库:
mysql
- 非关系型数据库:
redis
mongodb
- 关系型数据库:
mongodb
1.windows下安装
mongodb下载链接
默认安装或更改自己安装的位置
找到安装目录下的bin复制地址添加到环境变量
2.使用工具
3.对比mysql理解
这个也是个c/s架构,有自己的服务端
SQL | Mongodb |
---|---|
表(Talbe) | 集合(Collection) |
行(Row) | 文档(Document) |
列(Col) | 字段(Field) |
主键(Primary Key) | 对象ID(ObjectId) |
4.数据的增删改查
4.0 数据类型
Object ID: 主键ID【"_id" : ObjectId("56456vagbewgwgg6b03133")】
String: 字符串
Boolean: 布尔值
Integer: 数字
Doube: 小数
Arrays: 数组,[1,2,3]
Object: 文档(关联其他对象) {sname: safaf, sage: 18, class:{sscc}}
Null : 空值
Timestamp: 时间戳
Date: 时间日期
4.1 基本操作
4.2 普通查询
db.c1.find() 查询所有
db.c1.find({"字段":"固定值"}) 查询满足条件的所有数据
db.c1.findOne({条件}) 查询满足条件的第一条数据
db.getCollection('c1').find({"字段1":"固定值1","字段2":"固定值2"})
4.3 比较运算
等于: 默认是等于判断, $eq
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt (greater than)
大于等于:$gte
不等于:$ne
db.stu.find({age:28}) 查询年龄是28岁的学生信息
db.stu.find({age: {$eq: 28}}) 查询年龄是28岁的学生信息
db.stu.find({age: {$gt: 30}}) 查询年龄大于30岁的学生
db.stu.find({age: {$lt: 30}}) 查询年龄小于30岁的学生
db.stu.find({age: {$gte: 38}}) 查询年龄大于等于30岁的学生
db.stu.find({age: {$lte: 38}}) 查询年龄小于等于30岁的学生
db.stu.find({age: {$ne: 38}}) 查询年龄不等于38的学生
4.4 逻辑运算符
- and
$and: [条件1, 条件2, 条件3…]
查询年龄等于33, 并且, 名字是"大老王"的学生信息
db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})
- or
$or: [条件1, 条件2, 条件3]
查询名字叫"李嘉诚"的, 或者, 年龄超过100岁的人
db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]})
-
nor
$nor: [条件1, 条件2, 条件3]
查询年龄不小于38岁的人, 名字还不能是朱元璋.
db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})
4.5 范围运算符
使用$in, $nin判断数据是否在某个数组内
db.stu.find({age: {$in:[28, 38]}}) 年龄是28或者38的人
4.6 正则表达式
使用$regex进行正则表达式匹配
db.stu.find({address: {$regex:'^北京'}}) 查询地址是北京的人的信息
db.stu.find({address: /^北京/}) 效果一样
4.7 skip和limit
db.stu.find().skip(3).limit(3)
跳过3个. 提取3个. 类似limit 3, 3 可以用来做分页
4.8 排序
sort({字段:1, 字段:-1})
1表示升序
-1表示降序
对查询结果排序, 先按照age升序排列, 相同项再按照score降序排列
db.stu.find().sort({age:1, score: -1})
4.9 统计数量
count(条件) 查询数量
db.stu.count({age:33})
5.python操作mongo
5.1.安装包
-
pip install pymongo
5.2使用
import pymongo
# 1.创建连接对象
def get_db(db): # 参数为选择的数据库
conn = pymongo.MongoClient(
host="127.0.0.1",
port=27017,
)
# 登录该数据库(需要的话)
# conn.authenticate("用户名", '密码')
# 2.连接选择的数据库
db = conn[db]
return db
# 查询
def getall(table):
db = get_db("php")
rows = db[table].find()
for r in rows:
print(r)
# 将数据插入到表中
def add_one(table, data):
db = get_db("php")
res = db[table].insert_one(data)
return res
# 修改数据
def update(table, ex, data):
"""
:param table: 表
:param ex: 条件
:param data: 数据
:return: 修改的数据
"""
db = get_db("php")
res = db[table].update_many(ex, {"$set": data})
return res
# 删除数据
def delete(table, ex):
db = get_db("php")
res = db[table].delete_many(ex)
return res
if __name__ == '__main__':
# 函数调用
# getall("stu") # 查看stu表所有数据
# update("stu", {"age": 33}, {"name": "xxx"})
# delete("stu",{"age":33})
# todo
# 其他方法自己封装
pass
总结
MongoDB是一种非关系型数据库,采用文档型的存储方式,被广泛应用于大规模数据存储和高性能数据读写的场景。
-
数据结构:MongoDB使用BSON(Binary JSON)格式存储数据,BSON是一种二进制表示的JSON文档,支持嵌套和动态模式。每个文档都有一个唯一的_id字段,用于唯一标识文档。
-
数据模型:MongoDB采用文档型的数据模型,每个文档相当于数据库中的一行记录,不同文档可以有不同的结构。文档可以嵌套,支持复杂的数据结构。
-
查询语言:MongoDB提供了丰富的查询语言,支持类似SQL的查询语法和一些特殊的查询操作符。其中最常用的查询操作符包括 e q (等于)、 eq(等于)、 eq(等于)、ne(不等于)、 g t (大于)、 gt(大于)、 gt(大于)、lt(小于)、 i n (包含在数组中)、 in(包含在数组中)、 in(包含在数组中)、exists(字段存在性判断)等。
-
索引:MongoDB支持各种类型的索引,包括唯一索引、复合索引、地理空间索引等。索引可以加速查询性能,提高数据检索的效率。
-
事务:MongoDB支持事务操作,在多个文档之间维护数据的一致性和完整性。事务操作可以保证数据库的原子性、一致性、隔离性和持久性。
-
复制和分片:MongoDB支持数据的复制和分片,可以横向扩展数据库的存储能力和读写性能。复制可以提高数据库的可用性和容灾能力,分片可以将数据分散存储在多个节点上,以应对高并发和大规模数据存储的需求。
-
高性能:MongoDB具有出色的读写性能,支持高并发的数据访问。它采用了内存映射文件的方式进行数据读写,利用内存缓存和磁盘交互高效地处理数据。
-
扩展性:MongoDB具有良好的扩展性,可以在集群中添加新的节点,以满足不断增长的数据需求。它支持动态负载均衡和自动数据迁移,可以平衡集群的负载和存储容量。