zoukankan      html  css  js  c++  java
  • MongoDB基础使用

    MongoDB:是一个基于分布式文件存储的非关系数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB的查询语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

    NoSQL:指非关系型数据库,有的文档称作Not Only SQL的缩写,是对不同于传统的关系型数据库管理系统的统称。适用于超大规模数据的存储。

    NoSQL特点

    1.没有声明性查询语言
    2.没有预定义的模式
    3.key-value形式的键值对存储、列存储、文档存储、图形数据库
    4.最终一致性,非ACID属性
    5.CAP定理
    6.高性能、高可用性、可伸缩性
    

    CAP定理:一个分布式系统不可能同时很好的满足 一致性、可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

    一致性(Consistency):所有节点在同一时间具有相同的数据  
    可用性(Availability):保证每个请求不管成功或者失败都有响应  
    分区容错性(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运行  
    

    只能同时满足上面三点中的两点,也就是说有CA、CP和AP三种类型的搭配。

    分布式系统:(distributed system)是建立在网络之上的软件系统。所以分布式系统具有高度的内聚性和透明性。

    BASE:BASE是对CAP原理中一致性( C )和可用性(A)权衡的结果。即:即使无法做到强一致性,但是可以根据业务特点,采用适当的方式使系统达到最终一致性。
    BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写

    MongoDB下载:下载链接为:https://www.mongodb.com/download-center/community ,若该链接不可用,可去https://www.mongodb.com/ 寻找最新的下载地址。如下图所示:下载地址有不同平台和版本可供选择,选择自己所需版本下载即可。这里我下载的是适用于Mac平台的4.0.12版本。对于Mac平台:从 MongoDB 3.0 版本开始只支持 OS X 10.7 (Lion) 版本及更新的mac版本系统(下载时要注意自己的mac系统版本和MongoDB版本的兼容性)。

    为了方便我用curl命令下载:

    1.进入/usr/local/
    cd /usr/local/
    2.用curl命令下载
    sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.12.tgz
    3.解压下载下来的MongoDB包
    sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.12.tgz
    4.将解压出来的目录重命名为 mongodb
    sudo mv mongodb-osx-x86_64-4.0.12 mongodb
    

    MongoDB配置

    1.进入 /usr/local/mongodb/ 目录
    cd /usr/local/mongodb/
    2.创建一个数据库存储目录
    sudo mkdir data/db
    3.创建一个log作为日志文件目录
    sudo mkdir -p log
    4.创建一个log/mongo.log日志文件
    sudo touch log/mongo.log
    5.创建一个 etc 目录作为MongoDB配置文件的目录
    sudo mkdir etc
    6.创建配置文件etc/mongo.conf
    sudo touch etc/mongo.conf
    7.修改 etc/mongo.conf权限
    sudo chmod 777 etc/mongo.conf
    8.将下列项写入配置文件 etc/mongo.conf
    logpath=/usr/local/mongodb/mongo.log
    logappend=true
    dbpath=/usr/local/mongodb/data/db
    fork=true
    port=27017
    

    上面的 fork=true 只在linux平台下有效,意思是以守护进程的方式在后台运行。

    运行MongoDB

    1.进入 /usr/local/mongodb/bin/ 目录
    cd /usr/local/mongodb/bin/
    2.运行MongoDB
    sudo ./mongod --config /usr/local/mongodb/etc/mongo.conf
    3.进入MongoDB
    ./mongo
    

    使用MongoDB

    查看所有数据库,使用 show dbs

    show dbs
    

    切换/创建数据库: use DATABASE_NAME

    use food
    

    创建集合

    db.createCollection("students")
    

    删除数据库用 db.dropDatabase()

    db.dropDatabase()
    

    MongoDB其他常用命令见另一篇博客MongoDB常用命令

    关闭MongoDB服务

    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    > use admin
    switched to db admin
    > db.shutdownServer()
    2019-09-09T00:32:05.661+0800 I NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
    server should be down...
    2019-09-09T00:32:05.663+0800 I NETWORK  [js] trying reconnect to 127.0.0.1:27017 failed
    2019-09-09T00:32:05.664+0800 I NETWORK  [js] reconnect 127.0.0.1:27017 failed failed 
    > exit
    bye
    

    Python操作MongoDB

    Python要连接MongoDB,需要MongoDB驱动,使用pymongo驱动来连接。我自己环境Python版本为3.7.
    安装pymongo:

    pip3 install pymongo
    

    然后创建一个python脚本文件:mongo_test.py

    #!/usr/bin/python3
    
    import pymongo
    
    
    def test_mongo():
        # 获取数据库连接
        test_client = pymongo.MongoClient("127.0.0.1", 27017)
    
        # 获取MongoDB中所有的数据库
        db_list = test_client.list_database_names()
    
        # 获取数据库(如果没有则会创建一个数据库)
        test_db = test_client["hduedu"]
    
        # 获取所有的集合
        col_list = test_db.list_collection_names()
    
        # 获取集合(如果没有则会新建一个集合)
        test_col = test_db["teacher"]
    
        # 向集合中插入数据
        # 插入一个文档用:insert_one(document),这里document是一个字典
        # 插入多个文档用:insert_many(document),这里document是一个字典列表
        document01 = {"name": "tony", "age": 36}
        test_col.insert_one(document01)
    
        # 查询集合中的数据
        # 查询一条数据用:find_one()
        one_data = test_col.find_one()
    
        # 查询集合中所有数据用:find()
        all_data = test_col.find()
    
        # 有条件的查询用:find("查询条件")
        # 查询指定字段的数据:1表示返回,0表示不返回
        cond_data = test_col.find({}, {"_id":0, "name":1})
    
        # 查询name=tom的数据
        tom_data = test_col.find({"name": "tom"})
    
        # 查询年龄小于35岁的数据
        data35 = test_col.find({"age": {"$lt": 35}})
    
        # 查询name字段中以m结尾的数据
        data_m = test_col.find({"name": {"$regex": "m$"}})
    
        # 只查询3条数据记录
        data_3 = test_col.find().limit(3)
        
        # 修改数据
        # 修改一条数据用:update_one()
        my_query = {"name": "tony"}
        new_value = {"$set": {"age": 44}}
        test_col.update_one(my_query, new_value)
    
        # 修改多条数据用:update_many()
        test_col.update_one(my_query, new_value)
    
        # 查询结果排序用:sort(字段,规则) 1升序,-1降序
        test_col.find().sort("age", 1) 
        test_col.find().sort("age", -1)
    
        # 删除数据
        # 删除一条数据用: delete_one()
        test_col.delete_one({"name": "tony"})
    
        # 删除多条数据用:delete_many()
        test_col.delete_many({"name": {"$regex": "ny$"}})
    
        # 删除集合中所有数据
        test_col.delete_many({})
        
        # 删除集合
        test_col.drop()   
    
    
    if __name__ == '__main__':
        test_mongo()
    
    

    mongoengine:是一个对象文档映射器(ODM-Object Document Mapping)。mongoengine是基于pymongo的。mongoengine用起来就相当于一个基于SQL的对象关系映射器(ORM-Object Relational Mapping)。
    安装mongoengine

    pip3 install mongoengine
    

    创建一个Python脚本:mongoengine_test.py

    #!/usr/bin/python3
    
    import mongoengine
    
    
    # 连接数据库
    mongoengine.connect("hduedu", host="127.0.0.1", port=27017)
    
    class Teacher(mongoengine.Document):
        name = mongoengine.StringField(required=True)
        age = mongoengine.IntField(required=True)
    
    
    if __name__ == '__main__':
        # 往集合中增加数据
        teacher01 = Teacher()
        teacher01.name = "andy"
        teacher01.age = "12"
        teacher01.save()
    
        # 删除name=tony的数据
        teacher02 = Teacher.objects(name="tony")
        teacher02.delete()
    
        # 将集合中age=12的数据的name修改为jane
        # 修改的方法有:update_one() update()
        teacher03 = Teacher.objects(age=12).update_one(set__name="jane")
    
        # 获取集合中所有数据
        # 查询方法有:all() first() filter()
        all_teachers = Teacher.objects.all()
        for teacher in all_teachers:
            print("name:{0}, age:{1}".format(teacher.name, teacher.age))
    

    简单用法如上,为了方便维护代码,使用mongoengine时可使用MVC来写代码。

    本文作者:温茶又折花

    本文链接: https://www.cnblogs.com/dyfblogs/p/14961376.html

    转载文章请注明作者和出处,谢谢!
  • 相关阅读:
    Oracle 查询出来的数据取第一条
    如何将Oracle 当前日期加一天、一分钟
    Oracle 增加修改删除字段
    asp.net,简单权限。存取读XML
    SQL中使用update inner join和delete inner join
    防止浏览器记住用户名及密码的简单实用方法
    vb.net 接口POST方式传参数提交返回值
    导入EXCEL表时,提示"找不到可安装的ISAM"怎么办
    vb.net读取EXCEL
    导入excel错误:外部表不是预期的格式 解决方案
  • 原文地址:https://www.cnblogs.com/dyfblogs/p/14961376.html
Copyright © 2011-2022 走看看