数据库基础--Mongodb知识体系(掌握Mongodb,看完这篇文章就够了!)

1.非关系型数据库

非关系型数据库Mongodb是一种基于文档存储的NoSQL数据库,采用面向文档的数据模型,数据以类似json格式进行存储。Mongodb中有数据库、集合(相当于表)、文档(相当于行)、字段(相当于列)。

2.Mongodb操作

数据库相关语句:

查看所有数据库

show dbs

(只显示非空数据库)

创建数据库

use 数据库名

(没有改数据库就会创建,有则直接切换到该数据库)

删除数据库

db.dropDatabase()

(前提:先切换到改数据库)

集合相关语句:

查看所有集合show collections
创建一个集合db.createCollection("集合名")
删除一个集合db.集合名.drop()

数据相关语句:

查询数据find()找到所有
findOne()只找一行
findMany()找多个
插入数据insert()插入一个或者多个
insertOne()插入一个
insertMany()插入多个
修改数据updateOne()

修改一个数据

例子:db.teacher.updateOne({"title": "s1"}, {"$set": {"sex": "男"}})

修改时,{"$set": {"sex": "男"}}不修改原始的内容,只在后边追加新的内容

updateMany()修改多个
删除数据deleteOne()删除一个
deleteMany()删除多个

3.查询条件

比较运算符:$gt:大于,$gte:大于等于,$le:小于,$lte:小于等于,$ne:不等于

逻辑运算符:并且:例子:db.集合名.find({"key": value, "key": value})

                     或者:例子:db.集合名.find({$or: [{"age": 15}, {"age": 20}]})

成员:$in:例子:找到年纪是15或者20的数据,db.集合名.find({"age": {$in: [15, 20]}})

正则: /正则表达式/,//中间写正则表达式

           找到所有title以t开头的数据,db.集合名.find({"title": /^t/}

自定义:如:找到年纪大于20的数据:db.集合名.find({$where: function(){return this.age > 20}})

4.常用方法

排序:.find().sort(),1 升序,-1 降序

            例子:db.teacher.find().sort({"age": 1}),db.teacher.find().sort({ "title": 1, "age": -1})

分页:limit(n),显示n个,db.teacher.find().limit(2)

          limit(n).skip(m),从m开始显示n个,db.teacher.find().limit(2).skip(2)

投影:只返回集合中需要的部分字段,而不是全部字段,find({}, {}列名:1, 列名2:-1)

           1 显示的列,0 不显示的列,_id列默认显示

聚合:对数据处理,将上一阶段处理结果转交给下一聚合

        $match:过滤,db.teacher.aggregate({$match: {age: {$gte: 20}}})

5.python连接mongodb数据库

通过pip命令安装第三方库pymongo,来导入模块。

构建连接:client = pymongo.MongoClient()。mongodb数据库可以不添加用户、密码、端口、ip,所有圆括号里可以不填参数。

选择数据库:db = client.get_database("数据库名"),如果没有该数据库,会自动创建一个。

选择集合:collection = db.get_collection("集合名"),如果没有该集合,会自动创建。

增删改查语句

关闭连接:client.close()

代码案例:

import pymongo


client = pymongo.MongoClient()
db = client.get_database("qi")
collection = db.get_collection("teacher")

# datas = collection.find({})
# find()的返回值是可迭代的、也是迭代器
# 可以使用for循环遍历得到结果
# print(isinstance(res, Iterable), isinstance(res, Iterator), isinstance(res, Generator))
# for data in datas:
#     print(data)

# find_one()直接返回的是结果,类型是字典
# res = collection.find_one({"age": {"$gte": 20}})
# print(type(res))

# 找到一个删除一个
# res = collection.find_one_and_delete({"age": 15})
# print(res)

# 插入
# res = collection.insert_one({"age": 15, "title": "s9"})
# print(res.inserted_id)
# 插入多个,必须是可迭代的
# res = collection.insert_many([{"age": 15, "title": "s9"}, {"age": 19, "title": "s8"}])
# print(isinstance(res, Iterable), isinstance(res, Iterator), isinstance(res, Generator))

# 删除
# res = collection.delete_one({"age": 15, "title": "s9"})
# print(res.deleted_count)
# res = collection.delete_many({"age": 15, "title": "s9"})
# print(res.deleted_count)

# 更新
res = collection.delete_one({"age": 19}, {"$set": {"title": "s10"}})
print(res)
client.close()

小结

Mongodb不使用表格来存储数据,使其拥有了灵活的数据模型,文档存储数据可以是一个简单的键值对结构,没有数据类型的约束,适合存储非结构化或半结构化的数据。并且MongoDB 提供了丰富的查询语言和聚合框架,支持复杂的查询操作和数据聚合,可以满足各种数据处理和分析的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值