数据库之mongo

大家一起进步,感谢大家的支持和关注

前言

  • 数据库分类
    • 关系型数据库:mysql
    • 非关系型数据库:redis mongodb

mongodb

1.windows下安装

mongodb下载链接
默认安装或更改自己安装的位置
找到安装目录下的bin复制地址添加到环境变量

2.使用工具

在这里插入图片描述

3.对比mysql理解

这个也是个c/s架构,有自己的服务端

SQLMongodb
表(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 逻辑运算符

  1. and
    $and: [条件1, 条件2, 条件3…]
查询年龄等于33, 并且, 名字是"大老王"的学生信息
db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})
  1. or
    $or: [条件1, 条件2, 条件3]
查询名字叫"李嘉诚"的, 或者, 年龄超过100岁的人
db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]})
  1. 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是一种非关系型数据库,采用文档型的存储方式,被广泛应用于大规模数据存储和高性能数据读写的场景。

  1. 数据结构:MongoDB使用BSON(Binary JSON)格式存储数据,BSON是一种二进制表示的JSON文档,支持嵌套和动态模式。每个文档都有一个唯一的_id字段,用于唯一标识文档。

  2. 数据模型:MongoDB采用文档型的数据模型,每个文档相当于数据库中的一行记录,不同文档可以有不同的结构。文档可以嵌套,支持复杂的数据结构。

  3. 查询语言:MongoDB提供了丰富的查询语言,支持类似SQL的查询语法和一些特殊的查询操作符。其中最常用的查询操作符包括 e q (等于)、 eq(等于)、 eq(等于)、ne(不等于)、 g t (大于)、 gt(大于)、 gt(大于)、lt(小于)、 i n (包含在数组中)、 in(包含在数组中)、 in(包含在数组中)、exists(字段存在性判断)等。

  4. 索引:MongoDB支持各种类型的索引,包括唯一索引、复合索引、地理空间索引等。索引可以加速查询性能,提高数据检索的效率。

  5. 事务:MongoDB支持事务操作,在多个文档之间维护数据的一致性和完整性。事务操作可以保证数据库的原子性、一致性、隔离性和持久性。

  6. 复制和分片:MongoDB支持数据的复制和分片,可以横向扩展数据库的存储能力和读写性能。复制可以提高数据库的可用性和容灾能力,分片可以将数据分散存储在多个节点上,以应对高并发和大规模数据存储的需求。

  7. 高性能:MongoDB具有出色的读写性能,支持高并发的数据访问。它采用了内存映射文件的方式进行数据读写,利用内存缓存和磁盘交互高效地处理数据。

  8. 扩展性:MongoDB具有良好的扩展性,可以在集群中添加新的节点,以满足不断增长的数据需求。它支持动态负载均衡和自动数据迁移,可以平衡集群的负载和存储容量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值