MongoDB存储----文档型数据库

  • 利用pymongo连接MongoDB

    import pymongo
    client = pymongo.MongoClient(host='localhost', port=27017)
    # 或 pymongo.MongoClient('mongodb://localhost:23017/')
    # 默认端口为:27017
    # pymongo.MongoClient()方法
  • 指定数据库

    # 指定操作test数据库
    # db = client.test 或 db = client['test']
  • 指定集合

    # 指定一个集合要操作的集合students
    # collection = db.students 或 collection = db['students']
  • 插入数据

    import pymongo
    
    # 连接MongoDB
    client = pymongo.MongoClient(host='localhost', port=27017) # 指定数据库
    db = client.test # 指定集合
    collection = db.students # 数据
    student = {
    'id': '',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
    } # 利用insert_one()方法插入一条数据
    result = collection.insert_one(student)
    print(result) # 运行输出:<pymongo.results.InsertOneResult object at 0x11089b448>
    # 在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。
    # 使用 insert_one()和 insert_many()方法来分别插入单条记录和多条记录

    插入单条数据

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students student1 = {
    'id': '',
    'name': 'Lee Hua',
    'age': 20,
    'gender': 'male'
    }
    student2 = {
    'id': '',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
    } result = collection.insert_many([student1, student2])
    print(result)
    print(result.inserted_ids)
    # 调用inserted_ids属性可以获取数据的_id列表 # 运行输出:
    <pymongo.results.InsertManyResult object at 0x110826d88>
    [ObjectId('5d28b293e834575faf929428'), ObjectId('5d28b293e834575faf929429')]

    插入多条数据

    # insert_one()方法 和 insert_many()方法
    
  • 查询

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students result = collection.find_one({'name': 'Lee Hua'})
    print(result) # 输出:
    {'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}

    查询单条数据

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students result = collection.find()
    print(result)
    for r in result:
    print(r) # find()方法返回一个迭代器,用for循环逐条输出
    # 输出结果:
    <pymongo.cursor.Cursor object at 0x10e0f7320>
    {'_id': ObjectId('5d28ae0360105a198d9d501a'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28ae2d8b3d004feb604874'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28b293e834575faf929429'), 'id': '', 'name': 'Mike', 'age': 21, 'gender': 'male'}

    查询多条数据

    # find_one()方法 和 find()方法

    可以在这两个方法里面添加条件,如:

    find(
    {
    'name': {'$regex': '^M.*'}
    }
    )
    这里查找的是以'M'开头的名字的那些数据,
    $regex指定的是正则表达式,
    ^M.*是一条正则表达式
    更多功能符号(如$regex)、数值比较符号的查看MongoDB官方文档:https://docs.mongodb.com/?searchProperty=manual
  • 计数

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students count = collection.count_documents(
    {
    'id': {'$regex': '^(2018)'}
    }
    )
    print(count) # 输出id为2018开头的数据的条数
    # collection.count_documents({条件}) 方法
  • 排序

     import pymongo
    
     client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students result = collection.find().sort('id', pymongo.ASCENDING)
    for r in result:
    print(r) # 以id升序输出所有的数据:
    {'_id': ObjectId('5d28ae0360105a198d9d501a'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28ae2d8b3d004feb604874'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}
    {'_id': ObjectId('5d28b293e834575faf929429'), 'id': '', 'name': 'Mike', 'age': 21, 'gender': 'male'} # sort()方法进行排序
    # pymongo.ASCENDING指定升序
    # pymongo.DESCENDING指定降序
    # sort()方法
    
  • 偏移

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students results = collection.find().sort('id', pymongo.DESCENDING).skip(1)
    print(
    [
    result['id'] for result in results
    ]
    ) # 输出:
    ['', '', ''] # skip(1)表示偏移1,即忽略前面一个元素

    skip()方法

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client.test
    collection = db.students results = collection.find().sort('id', pymongo.DESCENDING).skip(1).limit(2)
    print(
    [
    result['id'] for result in results
    ]
    ) # 输出:
    ['', ''] # limit(2) 即表示限制输出的数据条数为两条

    limit()方法

    # 数据量很大时,不使用大的偏移量来查询数据
  • 更新

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client['test']
    collection = db['students'] # 查询条件:age >= 20
    query_condition = {
    'age': {'$gte': 20}
    } # 更新条件:数据的age加1
    update_condition = {
    '$inc': {'age': 1}
    } result = collection.update_one(query_condition, update_condition)
    print(result)
    print(result.matched_count, result.modified_count) # 输出:
    <pymongo.results.UpdateResult object at 0x110a11c88>
    1 1 # 返回的结果是UpdateResul类型的
    # 调用matched_count属性,获得匹配数据的条数
    # 调用modified_count属性,获得影响数据的条数
    # $gte : 大于等于
    # $inc : 将字段递增指定的值
    # updata_one()更新与筛选器匹配的单个文档

    update_one()方法

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client['test']
    collection = db['students'] query_condition = {
    'age': {'$gte': 20}
    }
    update_condition = {
    '$inc': {'age': 1}
    } result = collection.update_many(query_condition, update_condition)
    print(result)
    print(result.matched_count, result.modified_count) # 输出:
    <pymongo.results.UpdateResult object at 0x111c84448>
    4 4

    update_many()方法

    # update_one()方法 和 update_many()方法
  • 删除

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client['test']
    collection = db['students'] result = collection.delete_one({'age': 21})
    print(result.deleted_count) # delete_one()方法:删除第一条符合条件的数据
    # delete_count属性:获取删除数据的条数

    delete_one()方法

    import pymongo
    
    client = pymongo.MongoClient(host='localhost', port=27017)
    db = client['test']
    collection = db['students'] result = collection.delete_many({'age': 21})
    print(result.deleted_count) # delete_many()方法:删除所有符合条件的数据

    delete_many()方法

  • PyMongo的详细用法:http://api.mongodb.com/python/current/api/pymongo/collection.html

数据存储之非关系型数据库存储----MongoDB存储的更多相关文章

  1. NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用

    业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...

  2. NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具

    业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装  NoSQL Manager for MongoDB 可 ...

  3. 大数据时代的数据存储,非关系型数据库MongoDB

    在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...

  4. 大数据时代的数据存储,非关系型数据库MongoDB(一)

    原文地址:http://www.cnblogs.com/mokafamily/p/4076954.html 爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Da ...

  5. Python3爬虫(十) 数据存储之非关系型数据库MongoDB

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.非关系型数据库NoSQL全程是Not Only SQL,非关系型数据库.NoSQL是基于键值对的,不需要经过S ...

  6. NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务

    业精于勤,荒于嬉:行成于思,毁于随. 一.MongoDB服务下载安装(windows环境安装) 1.进入官网:https://www.mongodb.com/,点击右上角的 Try Free  , 2 ...

  7. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  8. 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

    前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...

  9. 【Redis】(1)-- 关系型数据库与非关系型数据库

    关系型数据库与非关系型数据库 2019-07-02  16:34:48  by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...

随机推荐

  1. AVR单片机教程——EasyElectronics Library v1.1手册

    索引: bit.h delay.h pin.h wave.h pwm.h led.h rgbw.h button.h switch.h 主要更新: 用枚举类型替换了大部分宏定义: 添加了wave.h. ...

  2. Java 爬虫遇到需要登录的网站,该怎么办?

    这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫.在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录 ...

  3. js实现烟花效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Web应用程序并发问题处理的一点小经验

    在web应用中,一个账户,会有N多个涉及到数字的字段.比如一个账户的金额,积分等.这些字段就涉及到增减的情况.如果是在测试环境下,靠程序员或者测试手动点击.一般是发现不了问题. 一旦上到正式环境下.有 ...

  5. asp.net core刷新css缓存

    在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...

  6. Mysql高手系列 - 第24篇:如何正确的使用索引?【高手进阶】

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第24篇. 学习索引,主要是 ...

  7. 面试常考各类排序算法总结.(c#)

    前言 面试以及考试过程中必会出现一道排序算法面试题,为了加深对排序算法的理解,在此我对各种排序算法做个总结归纳. 1.冒泡排序算法(BubbleSort) 1.1 算法描述 (1)比较相邻的元素.如果 ...

  8. eclipse基础设置

    主要参考blog https://jingyan.baidu.com/article/d5a880eb6c4f7813f147ccef.html https://blog.csdn.net/Ricar ...

  9. 《深入理解Java虚拟机》-----第13章 线程安全与锁优化

    概述 在软件业发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维方式直接站在计算机的角度去抽象问题和解 ...

  10. Git上传项目至GitHub

    要使用github,首先需要下载git.安装git 1.先在github上创建一个git仓库,复制该github路径 2.用cmd进入一个目录 git clone github路径 从github上直 ...