知识内容:

1.mongodb介绍与基本使用

2.mongodb操作

一、mongodb介绍与基本使用

1.mongodb介绍

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

易于使用:

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

易于扩展:

  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即可连接上数据库

连接上之后:

二、mongodb操作

1.连接数据库创建表(document)并插入数据

代码:

 ""
注意,需要安装 pymongo 这个库
pip3 install pymongo 在你安装并开启 mongo 之后,就可以使用 pymongo 来连接使用 mongodb 了
"""
import pymongo
import random # 连接 mongo 数据库, 主机是本机, 端口是默认的端口
client = pymongo.MongoClient("mongodb://localhost:27017")
print("成功连接数据库", client) # 设置要使用的数据库
mongodb_name = 'mongo_demo'
# 直接这样就使用数据库了,相当于一个字典 -> 如果没有会自动创建 不需要我们自己去创建 (表也是一样)
# 下面这一句也可以这样写: db = client.mongo_demo
db = client[mongodb_name] # 插入数据
# ===
# mongo 中的 document 相当于 sqlite 中的 table
# 不需要定义,直接使用
# 不限定每条数据的字段
# 直接插入新数据,数据以字典的形式提供
# 下面的例子中, user 是文档名(表名),不存在的文档会自动创建
# 每个数据有一个自动创建的字段 _id,可以认为是 mongo 自动创建的主键 def insert():
u = {
'name': 'wyb',
'note': 'admin',
'随机值': random.randint(0, 3),
}
db.user.insert(u) insert()

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

2.查询数据

 import pymongo

 # 连接 mongo 数据库, 主机是本机, 端口是默认的端口
client = pymongo.MongoClient("mongodb://localhost:27017")
print("成功连接数据库", client) # 设置要使用的数据库
mongodb_name = 'mongo_demo'
db = client[mongodb_name] # 查找数据 -> find
# find 返回一个可迭代对象,使用 list 函数转为数组
def find():
user_list = list(db.user.find())
print('所有用户: ')
for item in user_list:
print(item) find() # find 可以传入参数来做条件查询
# 具体可以很复杂 这里只演示简单的
# 查询随机值为 1 的所有数据
def find1():
# 查询 随机值 等于1 的所有数据
query = {
'随机值': 1,
}
print('random 1: ', list(db.user.find(query))) # 查询 随机值 等于1 并且 name等于xxx 的所有数据
query = {
'随机值': 1,
'name': 'xxx',
}
print('random 1 and name xxx: ', list(db.user.find(query))) # 查询 随机值 大于 1 的所有数据
query = {
'随机值': {
'$gt': 1
},
}
print('random > 1', list(db.user.find(query))) # $or 查询
query = {
'$or': [
{
'随机值': 2,
},
{
'name': 'xxx'
}
]
}
print('or 查询', list(db.user.find(query))) # $gt -> 大于
# 此外还有 $lt $let $get $ne $or 等条件
# $lt -> 小于 $let -> 小于等于 $get -> 大于等于 $ne -> 不等于 $or -> 两种情况中至少满足一种 find1() # 部分查询(指定区域)
# 部分查询, 相当于 select xx, yy from 表名 语句
def find_condition():
query = {}
field = {
# 字段: 1 表示提取这个字段
# 不传的 默认是 0 表示不提取
'name': 1
}
print('部分查询,只查询name: ', list(db.user.find(query, field))) find_condition()

3.更新、删除数据

 import pymongo
import random # 连接 mongo 数据库, 主机是本机, 端口是默认的端口
client = pymongo.MongoClient("mongodb://localhost:27017")
print("成功连接数据库", client) # 设置要使用的数据库
mongodb_name = 'mongo_demo'
db = client[mongodb_name] # 更新数据
# 默认更新第一条查询到的数据
def update():
# 查找参数
query = {
'随机值': 1,
}
# 修改参数
form = {
'$set': {
'name': '更新后的name',
}
}
# db.user.update(query, form)
# 如果想要更新所有查询到的数据
# 需要加入下面的参数 {'multi': True}
options = {
'multi': True,
}
# 下面这一句相当于 db.user.update(query, form, multi=True)
db.user.update(query, form, **options) # update() # 删除
# ===
# 删除和 find 是一样的
# db.user.remove()

4.注意

  • 在程序中不会直接使用mongodb这些底层的操作,而是进行了封装,将底层逻辑封装成函数,就像上面一样
  • 另外在程序中不会使用mongodb的原生数据库的删除,而是在数据库中的数据加一个字段"_deleted",该字段默认为False,删除就是将这个字段置为True
  • 另外mongodb中的document(相当于表)中的字段不限制,可以随意添加任何不存在的字段,也就是说表中任意两项的字段可以是不一样的
 # select_all 是给用户使用的查询函数
# 如果一个数据是被删除了的,那么这个数据的_delected字段就为True,那么这个数据就不会被查询到
def select_all():
query = {
'_deleted': False,
}
user_list = list(db.user.find(query))
res = []
for u in user_list:
u.pop('_deleted') # 去掉_delected属性
us.append(u) # 把数据加入结果列表中
print('所有用户', len(res), res) # select_all()

常用数据库4 mongodb的更多相关文章

  1. 常用数据库:MongoDB

    下载地址:https://www.mongodb.com/download-center/community 安装及配置指南:https://docs.mongodb.com/manual/insta ...

  2. 了解常用数据库MySQL、Oracle、MongoDB

    本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 注:转载文章 什么是数据库 简单的说,数据库(英文 Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果( ...

  3. python对接常用数据库,快速上手!

    python对接常用数据库,快速上手! 很多同学在使用python进行自动化测试的时候,会涉及到数据库数据校验的问题,因为不知道如何在python中如何对数据库,这个时候会一脸茫然,今天在这里给大家汇 ...

  4. 常用数据库的驱动程序和Url地址

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jd ...

  5. 常用数据库 JDBC URL 格式

    一 常用数据库 JDBC URL 格式 1 sqLite  驱动程序包名:sqlitejdbc-v056.jar 驱动程序类名: org.sqlite.JDBC JDBC URL: jdbc:sqli ...

  6. JDBC ----常用数据库的驱动程序及JDBC URL:

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar  驱动类的名字:oracle.jdbc.driver.OracleDriver  JDBC URL ...

  7. 常用数据库的驱动类/URL/默认端口

    常用数据库的驱动类/URL/默认端口 1.Oracle:     格式:     驱动:oracle.jdbc.driver.OracleDriver     URL:jdbc:oracle:thin ...

  8. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包

    [-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...

  9. tomcat连接常用数据库的用法

    一.用于数据库连接的术语: JDBC:(Java database connectivity)是基于java数据访问技术的一个API通过客户端访问服务器的数据库,是一个面向关系型数据库并提供一种方法查 ...

随机推荐

  1. opencv-python教程学习系列9-程序性能检测及优化

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍程序性能检测及优化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环 ...

  2. XINU安装程序.exe一键配置好XINU实验环境 - imsoft.cnblogs

      还在一步一步配置复杂的XINU吗?XINU安装程序.exe一键配置好XINU实验环境. XINU安装程序.exe使用说明: 本程序配合<网络协议分析与实现>/(胡维华等编著)课本使用 ...

  3. Slack 开发入门之 Incoming Webhooks:往 Slack 的 Channel 中发消息

    一个工程师团队使用 Slack 进行团队协作比 QQ / 微信流的效率高多啦.除了基本的 IM 之外,它的扩展性也是非常重要的一点. 本文介绍 Slack 的开发入门:Incoming Webhook ...

  4. 枚举大小为k的子集

    这种位操作不大可能分析出来,先看代码再分析. 代码 使用条件:\(k>0\) void solve(int n,int k) { for(int comb = (1 << k) - ...

  5. test20180919 选择客栈

    题意 分析 不难发现把增加人数看成减少人数,上限是w 看成总数是w,问题就变成了询问有多少个子区间没有0. 考虑这个问题困难在哪里,就是区间加减法让我们不好判断0 的位置. 因为题目保证每个位置的值非 ...

  6. 使用OASGraph 暴露rest 接口为graphql api

    OASGraph 是loopback 团队开发的方便将rest api 暴露为graphql 的工具, 这个也是loopback 4 的一个新特性类似的有些团队提出了binding 以及stitch ...

  7. 【转】每天一个linux命令(14):head 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/06/2756278.html head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头 ...

  8. Spring Cloud 入门 之 Config 篇(六)

    原文地址:Spring Cloud 入门 之 Config 篇(六) 博客地址:http://www.extlight.com 一.前言 随着业务的扩展,为了方便开发和维护项目,我们通常会将大项目拆分 ...

  9. 【python】正则表达式-常用函数

    m = re.search(pattern, string) # 搜索整个字符串,直到发现符合的子字符串. m = re.match(pattern, string) # 从头开始检查字符串是否符合正 ...

  10. ASP.NET 实现伪静态网页方法

    方法一:利用Httphandler实现URL重写(伪URL及伪静态) 我们有时候会见到这样的地址:“http://www.huoho.com/show-12-34.html”,你或许认为在站点服务器根 ...