经常使用数据库4 mongodb

知识内容:web

1.mongodb介绍与基本使用sql

2.mongodb操做mongodb

 

 

 

1、mongodb介绍与基本使用数据库

1.mongodb介绍数组

Mongodb是一款强大,灵活,且易于扩展的通用型数据库。它能扩展出很是多的功能,如二级索引,范围查询,排序,聚合,以及地理空间索引。MongoDB做为文档数据库,支持复杂的关系存储,更适合如今的web2.0时代服务器

易于使用:session

  Mongodb是一个面向文档的数据库,而不是关系数据库,不采用关系模型主要是为了得到更好的扩展性,还有一些其余的好处。与关系型数据库相比,面向文档的数据库再也不用行的概念,取而代之的是更为灵活的“文档(document)”,经过在文档中嵌入文档和数组,面向文档的方法可以仅使用一条记录来表现复杂的层次关系,这与使用现代面向对象语言的开发者对数据的见解一致。app

易于扩展:dom

  MongoDB的设计是采用横向扩展。面向文档的数据模型使他能很容易地在多台服务器之间进行数据分割。MongoDB能自动处理跨集群的数据和负载,自动从新分配文档,以及将用户请求路由到正确的机器上。函数

丰富的功能:

  • 索引   MongoDB支持通用二级索引,容许多种快速查询,且提供惟一索引,复合索引,地理空间索引,以及全文索引
  • 聚合   MongoDB支持聚合管道,用户能经过简单的片断建立复杂的聚合,并经过数据库自动优化。
  • 特殊的集合类型   MongoDB支持存在时间有限的集合,适用于那些存在某个时刻过时的数据,如会话(session),相似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志。
  • 文件存储   MongoDB支持一种很是易用的协议,用于存储大文件和文件元数据。

 

 

2.mongodb安装及链接数据库

(1)下载

下载mongodb数据库服务端及mongodb数据库管理软件robomongo

 

(2)安装

就跟安装普通软件同样,robomongo本身去设置安装位置,Windows系统安装mongodb完后以下:

 

(3)运行服务器

在命令行中运行服务器程序 mongod.exe  出现以下错误

 

出现如下错误是由于缺乏数据文件目录,按照上面的提示到C盘下新建data目录,而后再在data目录下新建db目录再从新运行程序,出现如下提示所有勾选上

成功运行服务器,如今正等待链接:

 

(4)链接服务器(链接数据库)

打开以前安装的robomongo软件,而后点击create 建立链接并点击save便可,而后选中链接并点击connect便可链接上数据库

链接上以后:

 

 

 

2、mongodb操做

1.链接数据库建立表(document)并插入数据

代码:

 1 ""
 2 注意,须要安装 pymongo 这个库
 3 pip3 install pymongo
 4 
 5 在你安装并开启 mongo 以后,就可使用 pymongo 来链接使用 mongodb 了
 6 """
 7 import pymongo
 8 import random
 9 
10 # 链接 mongo 数据库, 主机是本机, 端口是默认的端口
11 client = pymongo.MongoClient("mongodb://localhost:27017")
12 print("成功链接数据库", client)
13 
14 # 设置要使用的数据库
15 mongodb_name = 'mongo_demo'
16 # 直接这样就使用数据库了,至关于一个字典 -> 若是没有会自动建立 不须要咱们本身去建立 (表也是同样)
17 # 下面这一句也能够这样写: db = client.mongo_demo
18 db = client[mongodb_name]
19 
20 
21 # 插入数据
22 # ===
23 # mongo 中的 document 至关于 sqlite 中的 table
24 # 不须要定义,直接使用
25 # 不限定每条数据的字段
26 # 直接插入新数据,数据以字典的形式提供
27 # 下面的例子中, user 是文档名(表名),不存在的文档会自动建立
28 # 每一个数据有一个自动建立的字段 _id,能够认为是 mongo 自动建立的主键
29 
30 def insert():
31     u = {
32         'name': 'wyb',
33         'note': 'admin',
34         '随机值': random.randint(0, 3),
35     }
36     db.user.insert(u)
37 
38 
39 insert()

运行一次上述代码,刷新robomongo,以下:

 

 

2.查询数据

 1 import pymongo
 2 
 3 # 链接 mongo 数据库, 主机是本机, 端口是默认的端口
 4 client = pymongo.MongoClient("mongodb://localhost:27017")
 5 print("成功链接数据库", client)
 6 
 7 # 设置要使用的数据库
 8 mongodb_name = 'mongo_demo'
 9 db = client[mongodb_name]
10 
11 
12 # 查找数据 -> find
13 # find 返回一个可迭代对象,使用 list 函数转为数组
14 def find():
15     user_list = list(db.user.find())
16     print('全部用户: ')
17     for item in user_list:
18         print(item)
19 
20 find()
21 
22 # find 能够传入参数来作条件查询
23 # 具体能够很复杂 这里只演示简单的
24 # 查询随机值为 1 的全部数据
25 def find1():
26     # 查询 随机值 等于1 的全部数据
27     query = {
28         '随机值': 1,
29     }
30     print('random 1: ', list(db.user.find(query)))
31 
32     # 查询 随机值 等于1 而且 name等于xxx  的全部数据
33     query = {
34         '随机值': 1,
35         'name': 'xxx',
36     }
37     print('random 1 and name xxx: ', list(db.user.find(query)))
38 
39     # 查询 随机值 大于 1 的全部数据
40     query = {
41         '随机值': {
42             '$gt': 1
43         },
44     }
45     print('random > 1', list(db.user.find(query)))
46 
47     # $or 查询
48     query = {
49         '$or': [
50             {
51                 '随机值': 2,
52             },
53             {
54                 'name': 'xxx'
55             }
56         ]
57     }
58     print('or 查询', list(db.user.find(query)))
59 
60     # $gt -> 大于
61     # 此外还有 $lt $let $get $ne $or 等条件
62     # $lt -> 小于     $let -> 小于等于    $get -> 大于等于    $ne -> 不等于     $or -> 两种状况中至少知足一种
63 
64 
65 find1()
66 
67 
68 # 部分查询(指定区域)
69 # 部分查询, 至关于 select xx, yy from 表名 语句
70 def find_condition():
71     query = {}
72     field = {
73         # 字段: 1 表示提取这个字段
74         # 不传的 默认是 0 表示不提取
75         'name': 1
76     }
77     print('部分查询,只查询name: ', list(db.user.find(query, field)))
78 
79 
80 find_condition()

 

 

3.更新、删除数据

 1 import pymongo
 2 import random
 3 
 4 # 链接 mongo 数据库, 主机是本机, 端口是默认的端口
 5 client = pymongo.MongoClient("mongodb://localhost:27017")
 6 print("成功链接数据库", client)
 7 
 8 # 设置要使用的数据库
 9 mongodb_name = 'mongo_demo'
10 db = client[mongodb_name]
11 
12 
13 # 更新数据
14 # 默认更新第一条查询到的数据
15 def update():
16     # 查找参数
17     query = {
18         '随机值': 1,
19     }
20     # 修改参数
21     form = {
22         '$set': {
23             'name': '更新后的name',
24         }
25     }
26     # db.user.update(query, form)
27     # 若是想要更新全部查询到的数据
28     # 须要加入下面的参数 {'multi': True}
29     options = {
30         'multi': True,
31     }
32     # 下面这一句至关于 db.user.update(query, form, multi=True)
33     db.user.update(query, form, **options)
34 
35 
36 # update()
37 
38 
39 # 删除
40 # ===
41 # 删除和 find 是同样的
42 # db.user.remove()

 

 

4.注意

  • 在程序中不会直接使用mongodb这些底层的操做,而是进行了封装,将底层逻辑封装成函数,就像上面同样
  • 另外在程序中不会使用mongodb的原生数据库的删除,而是在数据库中的数据加一个字段"_deleted",该字段默认为False,删除就是将这个字段置为True
  • 另外mongodb中的document(至关于表)中的字段不限制,能够随意添加任何不存在的字段,也就是说表中任意两项的字段能够是不同的
 1 # select_all 是给用户使用的查询函数 
 2 # 若是一个数据是被删除了的,那么这个数据的_delected字段就为True,那么这个数据就不会被查询到
 3 def select_all():
 4     query = {
 5         '_deleted': False,
 6     }
 7     user_list = list(db.user.find(query))
 8     res = []
 9     for u in user_list:
10         u.pop('_deleted')   # 去掉_delected属性
11         us.append(u)        # 把数据加入结果列表中 
12     print('全部用户', len(res), res)
13 
14 # select_all()
相关文章
相关标签/搜索