存储库之MongoDB

  MongoDB是一款强大、灵活、且易于扩展的通用型数据库

  一。安装 Mongofdb

    1.https://www.mongodb.com/download-center/community

    2.如图

  下一步

下一步

下一步

下一步

下一步

下一步

下一步

  # 注意(windows版本哦)如果没有下载好 直接复制:

  链接:https://pan.baidu.com/s/11Ad7_igayACM4mvcChD-eA
  提取码:4azn
  复制这段内容后打开百度网盘手机App,操作更方便哦

  (2)ok 了 我们开始下载 robo 可视化界面

  链接:https://pan.baidu.com/s/16-vcfIUriS2MdXEab-kfVw
  提取码:cln2

  直接安装就好了

  二.Mongodb 的使用

  2.1(四大特性)

  1、易用性

MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一致。
另外,不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易了。通常由于开发者能够进行快速迭代,所以开发进程得以加快。而且,实验更容易进行。开发者能尝试大量的数据模型,从中选一个最好的。

  2、易扩展性

应用程序数据集的大小正在以不可思议的速度增长。随着可用带宽的增长和存储器价格的下降,即使是一个小规模的应用程序,需要存储的数据量也可能大的惊人,甚至超出
了很多数据库的处理能力。过去非常罕见的T级数据,现在已经是司空见惯了。
由于需要存储的数据量不断增长,开发者面临一个问题:应该如何扩展数据库,分为纵向扩展和横向扩展,纵向扩展是最省力的做法,但缺点是大型机一般都非常贵,而且
当数据量达到机器的物理极限时,花再多的钱也买不到更强的机器了,此时选择横向扩展更为合适,但横向扩展带来的另外一个问题就是需要管理的机器太多。
MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB能够自动处理跨集群的数据和负载,自动重新分配文档,以及将
用户的请求路由到正确的机器上。这样,开发者能够集中精力编写应用程序,而不需要考虑如何扩展的问题。如果一个集群需要更大的容量,只需要向集群添加新服务器,MongoDB就会自动将现有的数据向新服务器传送

  3、丰富的功能

MongoDB作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外,还提供了一系列不断扩展的独特功能
#1、索引
支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、地理空间索引、全文索引

#2、聚合
支持聚合管道,用户能通过简单的片段创建复杂的集合,并通过数据库自动优化

#3、特殊的集合类型
支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话session。类似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志

#4、文件存储
支持一种非常易用的协议,用于存储大文件和文件元数据。MongoDB并不具备一些在关系型数据库中很普遍的功能,如链接join和复杂的多行事务。省略
这些的功能是处于架构上的考虑,或者说为了得到更好的扩展性,因为在分布式系统中这两个功能难以高效地实现

  4、卓越的性能

MongoDB的一个主要目标是提供卓越的性能,这很大程度上决定了MongoDB的设计。MongoDB把尽可能多的内存用作缓存cache,视图为每次查询自动选择正确的索引。
总之各方面的设计都旨在保持它的高性能
虽然MongoDB非常强大并试图保留关系型数据库的很多特性,但它并不追求具备关系型数据库的所有功能。只要有可能,数据库服务器就会将处理逻辑交给客户端。这种精简方式的设计是MongoDB能够实现如此高性能的原因之一

  

  二 MongoDB基础知识

1、文档是MongB的核心概念。文档就是键值对的一个有序集{‘msg‘:‘hello‘,‘foo‘:3}。类似于python中的有序字典。

需要注意的是:
#1、文档中的键/值对是有序的。
#2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
#3、MongoDB区分类型和大小写。
#4、MongoDB的文档不能有重复的键。
#5、文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:
#1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
#2、.和$有特别的意义,只有在特定环境下才能使用。
#3、以下划线"_"开头的键是保留的(不是严格要求的)。

2、集合就是一组文档。如果将MongoDB中的一个文档比喻为关系型数据的一行,那么一个集合就是相当于一张表

#1、集合存在于数据库中,通常情况下为了方便管理,不同格式和类型的数据应该插入到不同的集合,但其实集合没有固定的结构,这意味着我们完全可以把不同格式和类型的数据统统插入一个集合中。

#2、组织子集合的方式就是使用“.”,分隔不同命名空间的子集合。
比如一个具有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors,这是为了使组织结构更清晰,这里的blog集合(这个集合甚至不需要存在)跟它的两个子集合没有任何关系。
在MongoDB中,使用子集合来组织数据非常高效,值得推荐

#3、当第一个文档插入时,集合就会被创建。合法的集合名:
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

3、数据库:在MongoDB中,多个文档组成集合,多个集合可以组成数据库

数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串:
#1、不能是空字符串("")。
#2、不得含有‘ ‘(空格)、.、$、/、\和\0 (空字符)。
#3、应全部小写。
#4、最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
#1、admin: 从身份认证的角度讲,这是“root”数据库,如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出所有数据库或关闭服务器
#2、local: 这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中
#3、config: MongoDB用于分片设置时,分片信息会存储在config数据库中

4、强调:把数据库名添加到集合名前,得到集合的完全限定名,即命名空间

例如:如果要使用cms数据库中的blog.posts集合,这个集合的命名空间就是
cmd.blog.posts。命名空间的长度不得超过121个字节,且在实际使用中应该小于100个字节

  

  2.1 库的增 删 改 查

  (1)创建:use test(数据库名 )>>>  有则进入,无则创建,如果没有数据 我们 show dbs 是看不到我们创建的库的  只有插入数据才能show dbs

  use test  库

  db.table1.insert({"name":"koko","age":18})

  show dbs >>> show dbs  >>>可以查到我们数据库test

    

  2.2 语法的使用 增 删 改 查(重点)

     (1)增:

  # mongodb的增删 改查  # 1. 单增
# use test
# db.tabel1.insert({"name":"koko","age":18})

# user1 = {"name":"yye","age":18, "hobby":["dance","music","tennis"]}
# db.table1.insert(user0)
# 全查db.table21.find()
# 2.多条数据

  插入多条数据
# user2={
#     "_id":1,
#     "name":"bbb",
#     "age":10,
#     ‘hobbies‘:[‘music‘,‘read‘,‘dancing‘],
#     ‘addr‘:{
#         ‘country‘:‘China‘,
#         ‘city‘:‘weifang‘
#     }
# }
#
# user3={
#     "_id":2,
#     "name":"kkk",
#     "age":20,
#     ‘hobbies‘:[‘music‘,‘read‘,‘run‘],
#     ‘addr‘:{
#         ‘country‘:‘China‘,
#         ‘city‘:‘shanghai‘
#     }
# }
#
# user4={
#     "_id":3,
#     "name":"vvv",
#     "age":30,
#     ‘hobbies‘:[‘music‘,‘drink‘],
#     ‘addr‘:{
#         ‘country‘:‘China‘,
#         ‘city‘:‘hebei‘
#     }
# }
#
# user5={
#     "_id":4,
#     "name":"ccc",
#     "age":40,
#     ‘hobbies‘:[‘music‘,‘read‘,‘dancing‘,‘tea‘],
#     ‘addr‘:{
#         ‘country‘:‘China‘,
#         ‘city‘:‘BJ‘
#     }
# }
#
# user6={
#     "_id":5,
#     "name":"yyy",
#     "age":50,
#     ‘hobbies‘:[‘music‘,‘read‘,],
#     ‘addr‘:{
#         ‘country‘:‘China‘,
#         ‘city‘:‘guanxi‘
#     }
# }
# db.user.insertMany([user2,user3,user4,user5,user6])
# 全查db.user.find()

  

# 逻辑运算"""# SQL:=,!=,>,<,>=,<=# MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型

"""
# 1、select * from user where name = "ccc";   # 以前数据库的查询方法
# db.user.find({‘name‘:‘ccc‘})  #
# 2,select * from db1.user where name != "ccc";
# 2 db.user.find({‘name‘:{"$ne":‘ccc‘}})  # 取反

# select * from db1.user where id > 2;
# // 3.查找id>2 的user
# // db.user.find({"_id":{"$gt":2}})
#
# // db.user.find({‘name‘:{"$ne":‘ccc‘}})
# // 注释
# // 3.查找id>2 的user
# // db.user.find({"_id":{"$gt":2}})
# // 大于等于3
# //db.user.find({"_id":{"$gte":3}})
# // 小于等于2
# //db.user.find({"_id":{"$lte":2}})
#
# // Sql:and,or, not
# // #1、select * from db1.user where id >= 2 and id < 4;
# // db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})
#
# // 2,select * from db1.user where id >= 5 or name = "vvv";
# // 或则
# //db.user.find({"$or":[{"_id":{"$gte":5}},{"name":"vvv"}]})

  // 成员运算

// SQL:in,not in
// MongoDB:"$in","$ni

//1、select * from db1.user where age in (20,30,31);
//db.user.find({"age":{"$in":[20,30,40]}})

//2、select * from db1.user where name not in (‘alex‘,‘yuanhao‘);
//db.user.find({"name":{"$nin":[‘ccc‘,‘vvv‘]}}) 取反

  // 正则表达 以什么开头 以什么结尾

// 1、select * from db1.user where name regexp ‘^j.*?(g|n)$‘;
// db.user.find({"name":/^(c|v).*?(c|v)$/i}) // i 忽略大小写

  // 1、查看有dancing爱好的人

// db.user.find({‘hobbies‘:‘dancing‘})

// #2、查看既有dancing爱好又有tea爱好的人
// db.user.find({"hobbies":{"$all":["dancing","tea"]}})

//#3、查看第4个爱好为tea的人 索引为0的起始位
// db.user.find({"hobbies.3":"tea"})

// #4、查看所有人最后两个爱好 0字段不显示 1 为字段显示 0/1 要么全为ture 要么全为false
// db.user.find({},{‘hobbies‘:{"$slice":-2},"_id":1,"name":1,"age":1})

  

补充。。。。todo

    

原文地址:https://www.cnblogs.com/mofujin/p/11938606.html

时间: 2024-11-09 05:04:16

存储库之MongoDB的相关文章

94、存储库之MongoDB、mysql

本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库. 不采用关系型主要是为了获得更好得扩展性.当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有"行"(row)的概念取而代之的是更为灵活的"文档"(document)模型. 通过在文档

Python3网络爬虫实战-4、存储库的安装:PyMySQL、PyMongo、RedisPy、Red

在前面一节我们介绍了几个数据库的安装方式,但这仅仅是用来存储数据的数据库,它们提供了存储服务,但如果想要和 Python 交互的话也同样需要安装一些 Python 存储库,如 MySQL 需要安装 PyMySQL,MongoDB 需要安装 PyMongo 等等,本节我们来说明一下这些库的安装方式. 1.4.1 PyMySQL的安装 在前面一节我们了解了 MySQL 的安装方式,在 Python3 中如果想要将数据存储到 MySQL 中就需要借助于 PyMySQL 来操作,本节我们介绍一下 PyM

GitHub 在线存储库

GitHub是使用Git的版本控制系统是一个基于网络的托管服务的软件开发项目.它也有其标准的GUI应用程序可供下载(在Windows,Mac,GNU/Linux)的直接从服务的网站.但在这个环节中,我们将只能看到CLI部分. 创建GitHub的资料库 去到 github.com. 如果您已经GitHub的帐户,然后使用该帐户登录,或创建新的.从  github.com 网站按照以下步骤来创建新的存储库. 推送操作 Tom 决定使用GitHub上服务器.要开始新的项目,他将创建一个新的目录和一个文

Maven中央存储库

当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载. 下面是可以直接搜索的地址 http://search.maven.org/#advancedsearch%7Cgav

maven 学习---如何从Maven远程存储库下载?

根据 Apache Maven 的说明: Downloading in Maven is triggered by a project declaring a dependency that is not present in the local repository (or for a SNAPSHOT, when the remote repository contains one that is newer). By default, Maven will download from th

maven 学习---Maven中央存储库

当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载. 首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源, 如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载. Maven 的中央资源库网站是这样的: Maven中心储存库网站已经改版本,目录浏览可能不再使用. 这将直接被重定向到 http://search.maven.org/.这就好多了,现在有

大数据:70多个网站让你免费获取大数据存储库

你是否需要大量的数据来检验你的APP性能?最简单的方法是从网上免费数据存储库下载数据样本.但这种方法最大的缺点是数据很少有独特的内容并且不一定能达到预期的结果.以下是70多家可以获得免费大数据存储库的网站. Wikipedia:Database :向感兴趣的用户提供所有可用的内容的免费副本.可以得到多种语言的数据.内容连同图片可以下载. Common crawl 建立并维护一个所有人都可以访问的开放的网络.这个数据保存在亚马逊s3bucket中,请求者可能花费一些钱来访问它. Common cr

大数据存储库

国内:数据堂 你是否需要大量的数据来检验你的APP性能?最简单的方法是从网上免费数据存储库下载数据样本.但这种方法最大的缺点是数据很少有独特的内容并且不一定能达到预期的结果.以下是70多家可以获得免费大数据存储库的网站. Wikipedia:Database :向感兴趣的用户提供所有可用的内容的免费副本.可以得到多种语言的数据.内容连同图片可以下载. Common crawl 建立并维护一个所有人都可以访问的开放的网络.这个数据保存在亚马逊s3bucket中,请求者可能花费一些钱来访问它. Co

如何从Maven中央存储库下载?

根据 Apache Maven说明: 下载时由项目的 pom.xml 文件的依赖来决定,目前不在本地存储库触发(当中央存储库包含了一个更新).默认情况下,Maven将从中央存储库下载. 在Maven中,当你声明的库不在本地存储库也不在Maven中央存储库,程序将停止并输出错误消息到您的Maven控制台. 1.示例 这个 org.jvnet.localizer 只能存在于 Java.net.repository <dependency> <groupId>org.jvnet.loca