17网一起做网店广州站,网站页面相似度检测,海南营销网站建设,东莞市网络科技有限公司MongoDB介绍
MongoDB是一个介于关系数据库和非关系数据库之间的产品#xff0c;是非关系数据库当中功能最丰富#xff0c;最像关系数据库的。它支持的数据结构非常松散#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大#xff0c;其…MongoDB介绍
MongoDB是一个介于关系数据库和非关系数据库之间的产品是非关系数据库当中功能最丰富最像关系数据库的。它支持的数据结构非常松散因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大其语法有点类似于面向对象的查询语言几乎可以实现类似关系数据库单表查询的绝大部分功能而且还支持对数据建立索引。
为什么要使用nosql Nosql简介 NoSQL指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。例如谷歌或Facebook每天为他们的用户收集万亿比特的数据。这些类型的数据存储不需要固定的模式无需多余操作就可以横向扩展。 发展现状 现今的计算机体系结构在数据存储方面要求应用架构具备庞大的水平扩展性而NoSQL正在致力于改变这一现状。目前新浪微博的 Redis和 Google 的 Bigtable 以及 Amazon的 SimpleDB使用的就是 NoSQL 型数据库。 ** NoSQL 项目的名字上看不出什么相同之处但是它们通常在某些方面相同它们可以处理超大量的数据。** ** 这场革命目前仍然需要等待。NoSQL 对大型企业来说还不是主流但是一两年之后很可能就会变个样子。在 NoSQL 运动的最新一次聚会中来自世界各地的 150 人挤满了 CBS Interactive 的一间会议室。分享他们如何推翻缓慢而昂贵的关系数据库的暴政怎样使用更有效和更便宜的方法来管理数据。** ** 关系型数据库给你强加了太多东西。它们要你强行修改对象数据以满足数据库系统的需要。在 NoSQL 拥护者们来看基于 NoSQL 的数据库替代方案“只是给你所需要的”** Nosql特点 1 它可以处理超大量的数据 2 它运行在便宜的 PC 服务器集群上 PC 集群扩充起来非常方便并且成本很低避免了传统商业数据库“sharding”操作的复杂性和成本。 3 它击碎了性能瓶颈 NoSQL 的支持者称通过 NoSQL 架构可以省去将 Web 或 Java 应用和数据转换成 SQL 格式的时间执行速度变得更快。“SQL并非适用于所有的程序代码”对于那些繁重的重复操作的数据SQL 值得花钱。但是当数据库结构非常简单时SQL 可能没有太大用处 4 它没有过多的操作 虽然 NoSQL 的支持者也承认关系型数据库提供了无可比拟的功能集合而且在数据完整性上也发挥绝对稳定他们同时也表示企业的具体需求可能没有那么复杂 5 它的支持者源于社区 因为 NoSQL 项目都是开源的因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样不得不从社区中寻求支持 MongoDB特点 1 面向集合Collenction-Orented 意思是数据被分组存储在数据集中 被称为一个集合Collenction)。每个集合在数据库中都有一个唯一的标识名并且可以包含无限数目的文档。集合的概念类似关系型数据库里的表table不同的是它不需要定义任何模式schema) 2 模式自由schema-free) 意味着对于存储在 MongoDB 数据库中的文件我们不需要知道它的任何结构定义。提了这么多次无模式或模式自由它到是个什么概念呢例如下面两个记录可以存在于同一个集合里面 {welcome : Beijing} {age : 25} 3 文档型 意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 “BSON” 即 “Binary Serialized document Notation.”
MongoDB下载与安装
MongoDB官网 下载地址:https://www.mongodb.com/try/download/community 指定版本操作系统下载 安装步骤参考地址 MongoDB安装超详细_mongodb 安装-CSDN博客
启动MongoDB
终端命令: mongod --dbpath C:\Program Files\MongoDB\Server\4.4\data
连接MongoDB 在环境变量设置好的前提下,在终端输入命令mongo就可以进入到mongo的操作终端了。
配置环境变量参考如下: MongoDB数据库安装、配置系统环境变量、和基础命令_mongodb环境变量_我不得鸟的博客-CSDN博客 图例所示:
MongoDB概念解析
不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库下面我们挨个介绍。 下表将帮助您更容易理解Mongo中的一些概念 MongoDB三要素 数据库一个集合的物理容器一个数据库可以包含多个文档(一个服务器通常有多个数据库)。 文档:就是关系型数据库中的一行。文档是一个对象,由键值对构成,是json的扩展形式 集合类似于关系型数据库中的表集合存在于数据库中集合没有固定的结构这意味着你在对集合可以插入不同格式和类型的数据但通常情况下我们插入集合的数据都会有一定的关联性。
MongoDB数据类型 String:字符串必须是有效的UTF-8 Boolean:存储一个布尔值true或者false Integer:整数可以是32位或64位这取决于服务器 Double:存储浮点数 Arrays:数组或列表 Object:嵌入式文档 Null:存储Null值 Timestamp:时间戳 表示从1970-1-1到现在的总秒数 Object ID是一个12字节的十六进制数
MongoDB操作数据库的常用命令 show dbs 查看所有数据库 db 查看现在用的数据库 (MongoDB 中默认的数据库为 test如果你没有创建新的数据库集合将存放在 test 数据库中。) cls 清屏的命令 use admin 如果数据库不存在则创建数据库否则切换到指定数据库。 注意点:我们刚创建的数据库 demo01并不在数据库的列表中, 要显示它,我们需要向 demo01数据库插入一些数据。 db.dropDatabase() 要删除某个数据库 需要切换到该数据库 通过use 和db进行切换 自动创建集合 在 MongoDB 中你不需要创建集合。当你插入一些文档时MongoDB 会自动创建集合。 MongoDB删除集合 MongoDB插入文档(简单的理解就是在集合/表中插入数据) insert插入多条数据
for(i3;i10;i)db.test01.insert({x:i})MongoDB更新文档 db.集合名称.update({query}, {update}, {multi: boolean}) 参数query:查询条件 参数update:更新操作符 参数multi:可选默认是false表示只更新找到的第一条数据值为true表示把满足条件的数据全部更新 db.stu.update({name:jerry},{name:杰瑞}) 这种情况下 会改变name 但是其他的会被删除、 db.stu.update({name:张三},{$set:{name:张三丰}}) 这种情况下 会改变name并且其他的信息也不会变化 更新多条 比如说将所有的gender变成0 此时会发现 如果没有gender这个属性会进行添加 MongoDB删除文档 remove() 方法的基本语法 db.collection.remove(query, justOne ) query : 删除的文档的条件。 justOne : 如果设为 true 或 1则只删除一个文档如果不设置该参数或使用默认值 false则删除所有匹配条件的文档。 删除符合条件的第一条数据
MongoDB创建索引
测试数据集
for(i0;i100000;i){db.test.insert({name:testi,age:i})}
为什么要用到索引 索引通常能够极大的提高查询的效率如果没有索引MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。 这种扫描全集合的查询效率是非常低的特别在处理大量的数据时查询可以要花费几十秒甚至几分钟这对网站的性能是非常致命的。 索引是特殊的数据结构索引存储在一个易于遍历读取的数据集合中索引是对数据库表中一列或多列的值进行排序的一种结构 创建索引前
db.test.find({name:test9999})
db.test.find({name:test9999}).explain(executionStats) # 显示查询操作的详细信息executionTimeMillis : 39, 测试结果 executionTimeMillis : 37, 这个结果不唯一
怎么去创建索引
db.test.ensureIndex({name:1})
创建索引后
db.test.find({name:test9999}).explain(executionStats)executionTimeMillis : 6, 测试结果
executionTimeMillis : 0,
查看所有的索引
db.test.getIndexes()
默认情况下_id是集合的索引
删除索引
语法db.集合名.dropIndex({索引名称:1})
db.test.dropIndex({name:1})
db.test.getIndexes()
注意点: 注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex()之后的版本使用了 db.collection.createIndex() 方法ensureIndex() 还能用但只是 createIndex() 的别名。 拓展: 关于mongodb资料参考:MongoDB 索引 | 菜鸟教程
python与MongoDB交互
数据库的连接
from pymongo import MongoClient# 连接
client MongoClient()
MongoDB交互的增删改查import pymongo
from pymongo import MongoClient
class Mongo_python:# 初始化方法def __init__(self, HOST, PORT):self.HOST HOSTself.PORT PORT# 连接self.client MongoClient(HOST, PORT)
# 插入数据def insert_data(self):# 插入单条数据# self.client.school.teacher.insert_one({name: 李璐2, role: 学生})# 插入多条数据self.client.school.teacher.insert_many([{name: XH}, {name: YU}])
# 查询数据def query_data(self):try:teachers self.client.school.teacher.find()# print(list(teachers),type(teachers))# for one in teachers:# print(查找多条数据, one[_id], one[name])
teacher self.client.school.teacher.find_one({name: 李璐2})print(查找单条数据, teacher[_id], teacher[name])except Exception as e:print(e)
# 修改数据def set_data(self):# 修改多条数据# self.client.school.teacher.update_many(# {}, {$set: {role: 班主任11111}}## )# 修改单条数据# self.client.school.teacher.update_one({name: YU}, {$set: {sex: 女}})# push() 方法可向数组的末尾添加一个或多个元素并返回新的长度。self.client.school.teacher.update_one({name: YU}, {$push: {sdarole: 年级主任}})
# 删除数据def delete_data(self):try:# 删除单条数据# self.client.school.teacher.delete_one({name: 晨刚})# 删除多条数据# 第一个参数是一个查询对象用于定义要删除的文档query {name: 李璐2}self.client.school.teacher.delete_many(query)except Exception as e:print(e)
if __name__ __main__:mg Mongo_python(localhost, 27017)# mg.insert_data()# mg.query_data()# mg.set_data()mg.delete_data()