Mongodb简介及基本操作

一、简介

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

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB的特点:

1、易用性

MongoDB是由C++编写的,是一个基于分布式文件存储的开源数据库系统,它不是关系型数据库。在高负载的情况下,添加更多的节点,可以保证服务器的性能。

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、文档是MongoDB的核心概念。文档就是键值对的一个有序集{‘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集合,这个集合的命名空间就是
cms.blog.posts。命名空间的长度不得超过121个字节,且在实际使用中应该小于100个字节

Mongodb对数据库的增删改查

增:use db1 :#有则切换,无则新 增
查:
    - show dbs #查看所有数据库
    - db #查看当前库
删:db.dropDatabase()

#不会就用help

对集合(表)的增删改查

增:
    - db.user.info  #user.info表
    - db.user #user表
    - db.user.auth  ##user.auth表

  当第一个文档插入时,集合就会被创建
  > use database1
  switched to db database1
  > db.table1.insert({‘a‘:1})
  WriteResult({ "nInserted" : 1 })
  > db.table2.insert({‘b‘:2})
  WriteResult({ "nInserted" : 1 })
查:
    - show collections
    - show tables  #这两个是一样的
    #只要是空不显示
删:
    - db.user.info.help()  #查看帮助
    - db.user.info.drop()

对数据的增删改查

 1 import pymongo
 2
 3 mongo = pymongo.MongoClient("127.0.0.1",27017)
 4 MONGODB = mongo["SS2DAY04"]
 5
 6 #查:
 7 # result = list(MONGODB.users.find({}))
 8 # for item in result:
 9 #     print(item)
10 # print(result)
11
12 # result_one = MONGODB.users.find_one({})
13 # print(result_one,type(result_one))
14 # print(result_one.get("_id"),type(result_one.get("_id")))
15
16 # 增:
17 # res = MONGODB.student.insert_one({"name":"yd","nickname":"wl"})
18 # print(res.inserted_id,type(res.inserted_id))
19 # res = MONGODB.student.insert_many([{"name":"yd","nickname":"wl"},{"name":"wpq","nickname":"cb"},{"name":"lj","nickname":"dsb"}])
20 # print(res.inserted_ids)
21
22 # 删:
23 # MONGODB.student.remove({})
24 # MONGODB.student.delete_one({"name":"yd"})
25 # MONGODB.student.delete_many({"name":"yd"})
26
27 # 改:
28 # MONGODB.student.update({"name":"yd"})
29 # MONGODB.student.update_one({"name":"wpq"},{"$set":{"nickname":"peppa pig"}})
30 # MONGODB.student.update_many({},{"$set":{"age":84}})
31
32
33 # 删:
34 # MONGODB.student.delete_many({})
35 # MONGODB.student.drop()
36
37 # 分页:
38 # res = MONGODB.users.find({}).sort("age",pymongo.ASCENDING).limit(2).skip(0)
39 # for i in res:
40 #     print(i)

pymongo连接mongodb

 1 from pymongo import MongoClient
 2
 3 #1、链接
 4 client=MongoClient(‘mongodb://root:[email protected]:27017/‘)
 5 # client = MongoClient(‘localhost‘, 27017)
 6
 7 #2、use 数据库
 8 db=client[‘db2‘] #等同于:client.db1
 9
10 #3、查看库下所有的集合
11 print(db.collection_names(include_system_collections=False))
12
13 #4、创建集合
14 table_user=db[‘userinfo‘] #等同于:db.user
15
16 #5、插入文档
17 import datetime
18 user0={
19     "_id":1,
20     "name":"egon",
21     "birth":datetime.datetime.now(),
22     "age":10,
23     ‘hobbies‘:[‘music‘,‘read‘,‘dancing‘],
24     ‘addr‘:{
25         ‘country‘:‘China‘,
26         ‘city‘:‘BJ‘
27     }
28 }
29
30 user1={
31     "_id":2,
32     "name":"alex",
33     "birth":datetime.datetime.now(),
34     "age":10,
35     ‘hobbies‘:[‘music‘,‘read‘,‘dancing‘],
36     ‘addr‘:{
37         ‘country‘:‘China‘,
38         ‘city‘:‘weifang‘
39     }
40 }
41 # res=table_user.insert_many([user0,user1]).inserted_ids
42 # print(res)
43 # print(table_user.count())
44
45 #6、查找
46
47 # from pprint import pprint#格式化细
48 # pprint(table_user.find_one())
49 # for item in table_user.find():
50 #     pprint(item)
51
52 # print(table_user.find_one({"_id":{"$gte":1},"name":‘egon‘}))
53
54 #7、更新
55 table_user.update({‘_id‘:1},{‘name‘:‘EGON‘})
56
57 #8、传入新的文档替换旧的文档
58 table_user.save(
59     {
60         "_id":2,
61         "name":‘egon_xxx‘
62     }
63 )

原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9892838.html

时间: 2024-10-31 22:26:13

Mongodb简介及基本操作的相关文章

MongoDB权威指南第二版学习笔记——MongoDB简介

MongoDB简介 MongoDB在功能和复杂性之间取得了很好的平衡,并且大大简化了原先十分复杂的任务,它具备支撑今天主流web应用的关键功能:索引.复制.分片.丰富的查询语法,特别灵活的数据模型.与此同时还不牺牲速度. MongoDB是一款强大.灵活,且易于扩展的通用型数据库.能扩展出非常多的功能,如二级索引.范围查询.排序.聚合,以及地理空间索引. 设计特点 易于使用 MongoDB是一个面向文档的数据库,比关系型数据库有更好的扩展性.用文档代替行.能够仅使用一条记录来表现发展的层次关系.

MongoDB数据表基本操作

MongoDB数据表基本操作 查看全部数据表 > use ChatRoom switched to db ChatRoom > show collections Account Chat system.indexes system.users 创建数据表 > db.createCollection("Account") {"ok":1} > db.createCollection("Test",{capped:true,

MongoDB第二弹——基本操作

1 查看各个项目的Project ID编号 mysql -uroot -h10.10.2xx.xx show databases; use bugfree2; desc bf_TestProject; select ProjectID,ProjectName from bf_TestProject;(查询结果如下) 2 在/var/www/html/bugfree/BugFile路径下创建文件夹 mkdir Project2  Project3  Project4  Project5  Proj

MongoDB简介及基础知识

MongoDB简介 一.MongDB是一个高性能,开源,无模式的文档型NosQL数据库.主要功能特性: 1.文件存储格式BSON(一种json的扩展) 2.模式自由,数据格式不受限了表的结构 3.支持动态查询 4.支持完全索引 5.支持复制(其主从复制)和故障恢复 6.使用高效的二进制数据存储,包括大型对象 7.自动处理碎片,以支持云计算层次的扩展. 8.支持Java.Ruby.Python.C++.PHP等多种语言 9.内部支持Javascript 二.MongoDB的优势 1.查询速度快 2

Mongodb简介及安装部署配置

1.Mongodb简介及安装部署 Mongodb 逻辑结构:Mongodb 逻辑结构 MySQL逻辑结构库database 库集合(collection) 表文档(document) 数据行 2.安装前准备(1)redhat或cnetos6.2以上系统(2)系统开发包完整(3)ip地址和hosts文件解析正常(4)iptables防火墙&SElinux关闭(5)关闭大页内存机制############################################################

mongoDB学习 CRUD基本操作

中文社区https://mongoing.com/  (目前没有适配手机,适合pc浏览.) 极客时间有唐老师的课程  https://time.geekbang.org/course/intro/100040001 而且mongo有可视化工具 mongodb compass  下面基本操作是从唐老师的ppt里截图出来的 原文地址:https://www.cnblogs.com/yanghaolie/p/12687811.html

详解MongoDB安装以及基本操作

简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引. MongoDB特点 面向集合存储

MongoDB——简介与安装

MongoDB是几大NoSQL数据库类型中的文档型数据库.所以我们这里还是要对如今很流行的NoSQL进行介绍. 一.    NoSQL 1.1  概念 NotOnly Sql,泛指非关系型数据库.NoSQL的拥护者们提倡运用非关系型的数据存储,通常的应用如:模式自由.支持简易复制.简单的API.最终的一致性(非ACID).大容量数据等.NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的.列存储.图型数据库.xml数据库等.相对于目前铺天盖地的关系型数据库运用,这一概念无

MongoDB学习笔记(1):MongoDB简介

1. MongoDB的特点: (1) 易于使用 MongoDB是一个面向文档的数据库,非关系型数据库.通过在文档中嵌入式文档和数据,面向对象的方法能够仅使用一条记录来表现复杂的层次关系.文档的键和值不再是固定的类型和大小. (2) 易于扩展 MongoDB的设计采用横向扩展,即通过分区将数据分散到更多机器上.面向文档的数据模型使它很容易地在多台服务器之间进行数据分割.MongoDB能够自动处理集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上. (3) 丰富的功能 1) 索引