• Python下MongoDB的简单应用


    1.傻瓜安装失败请看下面方法

    1.mongodb下载zip文件
    2.解压到D或者E盘
    3.创建mangodb文件夹,把mongodb自创建文件夹中的所有文件剪切到mongodb
    4.此时目录结构D|E:mongodbin等等文件
    5.在D|E:mongodb目录下创建data和log文件夹,并在log中创建文件mongod.log
    6.在D|E:mongodb目录下创建mongod.cfg文件,添加路径:dbpath=D|E:mongodbdata
                                    logpath=D|E:mongodblogmongod.log
    7.添加环境变量,在系统变量(S)Path中添加路径D|E:mongodbin
    8.系统管理员身份运行cmd,mongod --config "D|E:mongodbmongod.cfg" --install
    9.开启服务   net start mongodb
    View Code

    2.MongoDB简介和pymongo连接的两种方法

    """
    非关系型数据库简介
    1.键值存储数据库:Redis、Oracle BDB、Voldemort等
    2.列存储数据库:HBase、Cassandra、Riak等
    3.文档型数据库:MongoDB、CouchDB等
    4.图形数据库:Neo4J、InfoGrid等
    ***开始学习MongoDB的使用***
    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,
    其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活
    http://api.mongodb.com/python/current/api/pymongo/collection.html 官方手册
    """
    import pymongo
    
    
    # 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
    client = pymongo.MongoClient(host="localhost", port=27017)
    # 一样的连接方式和连接类型
    print(client)
    # <class 'pymongo.mongo_client.MongoClient'>    生成数据库连接实例
    print(type(client))
    # 选择一个指定的数据库
    db = client.demo1
    print(db)
    # <class 'pymongo.database.Database'>   声明了一个Database对象
    print(type(db))
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection = db.students
    print(collection)
    # <class 'pymongo.collection.Collection'> 声明了一个Collection对象
    print(type(collection))
    
    
    # 第二种连接方式,直接传入MongoDB的连接字符串
    conn = pymongo.MongoClient("mongodb://localhost:27017/")
    # 一样的连接方式和连接类型
    print(conn)
    print(type(conn))
    # 选择一个指定的数据库
    db2 = conn["demo2"]
    print(db2)
    print(type(db2))
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection2 = db2["students"]
    print(collection2)
    print(type(collection2))
    View Code

    3.插入数据的两种方法

    """mongodb的数据插入"""
    import pymongo
    
    
    # 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
    client = pymongo.MongoClient(host="localhost", port=27017)
    # 选择一个指定的数据库
    db = client.demo
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection = db.students
    # 创建一条字典形式的数据
    student = {
        "id": "20190120",
        "name": "BangYu",
        "age": 21,
        "gender": "male"
    }
    # 调用对象Collection对象的insert方法插入数据并获取返回插入数据的id
    result = collection.insert(student)
    # 打印插入数据的id值
    print(result)
    # 插入多条数据则需要以列表的形式传递
    res = collection.insert([
        {"username": "aaa", "age": 18},
        {"username": "bbb", "age": 20}
    ])
    print(res)
    ##############上面是第一种插入数据的方法############################
    
    # 第二种插入数据的方法insert_one()和insert_many()
    # 创建一条字典形式的数据
    people = {
        "id": "20190121",
        "name": "DangYu",
        "age": 22,
        "gender": "male"
    }
    # 插入一条数据
    obj = collection.insert_one(people)
    # 返回一个InsertOneResult对象
    from pymongo.results import InsertOneResult
    print(obj)
    # 调用这个对象的inserted_id()方法
    print(obj.inserted_id)
    
    # 插入多条数据
    objs = collection.insert_many([
        {"username": "ccc", "age": 19},
        {"username": "ddd", "age": 23}
    ])
    # 返回一个InsertManyResult对象
    print(objs)
    # 调用这个对象的inserted_ids()方法
    print(objs.inserted_ids)
    View Code

    4.删除数据的两种方法

    """mongodb删除数据"""
    import pymongo
    
    
    # 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
    client = pymongo.MongoClient(host="localhost", port=27017)
    # 选择一个指定的数据库
    db = client.demo
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection = db.students
    
    # 删除所有符合条件的数据
    remove = collection.remove({"username": "aaa"})
    # {'n': 5, 'ok': 1.0}   删除5条,删除完成
    print(remove)
    
    # 推荐删除方法delete_one()和delete_many()
    one = collection.delete_one({"username": "ddd"})
    # 删除第一条指定的数据
    print(one)
    from pymongo.results import DeleteResult
    # 调用DeleteResult对象的deleted_count属性获取删除的数据条数
    print(one.deleted_count)
    many = collection.delete_many({"username": {"$regex": "bbb"}})
    # 删除正则匹配到的所有数据
    print(many.deleted_count)
    View Code

    5.更新数据的两种方法

    """mongodb的数据更新操作"""
    import pymongo
    
    
    # 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
    client = pymongo.MongoClient(host="localhost", port=27017)
    # 选择一个指定的数据库
    db = client.demo
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection = db.students
    
    # 指定查询的条件
    condition = {"name": "YangYu"}
    # 查找第一条符合条件的数据
    user = collection.find_one(condition)
    # 修改年龄
    user["age"] = 26
    # 调用update()方法将原条件和修改后的数据传入
    response = collection.update(condition, user)
    # {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
    # n表示一条数据,nModified表示影响的数据一条,ok表示成功,最后修改的属性存在
    print(response)
    # 也可以使用$set操作符进行更新
    result = collection.update(condition, {"$set": user})
    # 一样的返回结果
    print(result)
    
    # 推荐使用方法update_one()和update_many()
    term = {"age": {"$gt": 20}}
    # 查询年龄大于20岁的第一条数据并增加年龄1
    one = collection.update_one(term, {"$inc": {"age": 1}})
    print(one)
    from pymongo.results import UpdateResult
    # 打印匹配的查询数据条数和受影响的数据
    print(one.matched_count, one.modified_count)
    
    # 查询所有与条件匹配的数据并增加年龄1
    many = collection.update_many(term, {"$inc": {"age": 1}})
    print(many)
    # 打印匹配的所有查询结果、查询数据条数和受影响的数据
    print(many.raw_result, many.matched_count, many.modified_count)
    View Code

    6.数据查询的多种方式

    """mongodb的数据查询"""
    import pymongo
    
    
    # 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
    client = pymongo.MongoClient(host="localhost", port=27017)
    # 选择一个指定的数据库
    db = client.demo
    # MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
    collection = db.students
    
    # 查询单个结果
    res = collection.find_one({"username": "aaa"})
    # 返回字典形式类型
    print(type(res))
    # {'_id': ObjectId('5c44515990ba093678011922'), 'username': 'aaa', 'age': 18}
    # 多了_id属性,是mongodb在插入数据的时候自动添加的属性
    print(res)
    
    # _id属性查询。需要使用bson库中的ObjectId类。数据量特别大时建议使用此方法
    from bson.objectid import ObjectId
    # 获取查询的返回数据结果。如果查询的数据不存在则返回None
    obj = collection.find_one({"_id": ObjectId('5c44515990ba093678011922')})
    # 一样的查询结果
    print(obj)
    
    # 查询多条数据
    objs = collection.find({"age": 18})
    print(objs)
    # <class 'pymongo.cursor.Cursor'>   Cursor类型相当于一个生成器
    from pymongo.cursor import Cursor
    print(type(objs))
    # 遍历获取所有结果。每个都是字典类型
    for row in objs:
        print(row)
    
    # 条件查询。查询年龄大于18的所有结果
    results = collection.find({"age": {"$gt": 18}})
    for res in results:
        print(res)
    """
    ***********比较符号*************
    $lt     小于           {'age': {'$lt': 20}}
    $gt     大于           {'age': {'$gt': 20}}
    $lte    小于等于       {'age': {'$lte': 20}}
    $gte    大于等于       {'age': {'$gte': 20}}
    $ne     不等于         {'age': {'$ne': 20}}
    $in     在范围内       {'age': {'$in': [20, 23]}}
    $nin    不在范围内     {'age': {'$nin': [20 , 23]}} 
    """
    
    # 功能查询。正则匹配查询名字以Y开头的数据
    response = collection.find({"name": {"$regex": "^Y.*"}})
    for rew in response:
        print(rew)
    """
    ***********功能符号*************
    $regex      匹配正则表达式     {'name': {"$regex": "^Y.*"}}    name以Y开头
    $exists     属性是否存在       {'name': {'$exists': True}}     name属性存在
    $type       类型判断           {'age': {'$type': 'int'}}      age的类型为int
    $mad        数字模操作         {'age': {'$mad': [5, 0]}}      年龄模5余0
    $text       文本查询           {'$text': {'$search': 'yang'}}  text类型的属性中包含yang字符串
    $where      高级条件查询       {'$where': obj.id == obj.sid_count'} 自身id数等于学号数
    https://docs.mongodb.com/manual/    官方参考手册
    """
    
    # 计数。先查询符合条件的结果再调用count()方法统计所有数据条数
    count = collection.find({"name": {"$regex": "^Y.*"}}).count()
    print(count)
    
    # 排序。使用ASCII码排序。ctrl+b进入可选择多种排序方式
    outcome = collection.find().sort("name", pymongo.ASCENDING)
    # 使用列表解析查看已排序的数据结果
    print([out["name"] for out in outcome])
    
    # 偏移。Cursor类下的方法skip()偏移位置.
    skips = collection.find().sort("name", pymongo.ASCENDING).skip(2)
    # 忽略前两个元素,得到第三个及以后的所有元素
    print([skip["name"] for skip in skips])
    # limit()方法获取指定的结果个数。
    limits = collection.find().sort("name", pymongo.ASCENDING).skip(2).limit(3)
    print([limit["name"] for limit in limits])
    View Code

    7.扩展的几种方法

    """mongodb扩展
    find_one_and_delete()       查找后删除
    find_one_and_replace()      查找后替换
    find_one_and_update()       查找后更新
    create_index()              在此集合上创建索引
    create_indexes()            在此集合上创建一个或多个索引
    drop_index()                删除此集合上的指定索引
    """
  • 相关阅读:
    mybatis-01-简单概述基础点
    04-书城缺少方法
    03-书城bean类中的id缺少get属性
    02-书城传参类型异常
    执行Oracle存储过程报权限不足的解决方法
    创建表空间及用户的SQL
    Oracle instr函数与SqlServer charindex的区别
    利用ExtJS导出Excel
    Java循环日期
    Oracle给不同组数据添加顺序
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9845886.html
走看看 - 开发者的网上家园