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 提供了丰富的查询语言和聚合框架,支持复杂的查询操作和数据聚合,可以满足各种数据处理和分析的需求。