zoukankan      html  css  js  c++  java
  • MongoDB和pymongo自用手册


    • [*] 本文出处:http://b1u3buf4.xyz/
    • [*] 本文作者:B1u3Buf4
    • [*] 本文授权:禁止转载

    从自己的另一处博客移动过来。长期维护,不定期添加新内容。

    前述和安装

    mongoDB按照分类应当是非关系型数据库,这种数据库没有传统sql那样的表的概念,自然也不支持多表查询。

    linux 安装

    官方的linux安装文档在这里

    安装方法无外乎是两种:

    一种是下载源文件,然后手动安装;另一种是通过包管理器进行安装。

    介绍通过包管理在ubuntu上安装:

    向包管理系统导入公钥

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
    

    创建文件列表(这里是16.04,不同版本此处有差别)

    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
    

    更新包数据

    sudo apt-get update
    

    安装最新的稳定版

    sudo apt-get install -y mongodb-org
    

    通过启动服务命令,然后就可以运行mongodb了。

    docker容器部署

    拉取镜像:

    docker pull mongo:latest
    

    创建、运行一个容器:

    docker run -p 27017:27017 -d mongo:latest #其他参数自定
    

    坑人的地方

    首先是docker自身的不稳定性,会导致数据丢失。典型的就是有时候容器坏了拉不起来,然后要重新配置。所有的数据自然而然是没有了。

    其次是效率。相对于直接使用,性能有所损耗,在大量写入的时候耗时多。

    不推荐盲目地在生产中使用docker下的mongoDB。做测试是可以的。

    Windows安装

    在官方网站上下载mongoDB,最新的版本只支持64位。

    打开安装包,选择“Custom”自定义安装,安装路径可以修改到非系统盘。然后不断“下一步”,安装至结束。

    创建数据库文件的存放位置

    因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。数据存放的位置也是比较随意的。命令行中使用如下命令启动mongodb服务:mongod --dbpath 数据存放位置的绝对地址,命令行中会看到一些初始化的内容。如果不成功,可以查看一下端口是否被占用。

    命令行下运行MongoDB服务器或者配置MongoDB服务,两者任选一个方式启动就可以了。

    新建一个mongo.config并输入(dbpath是数据存储的地址,logpath是记录日志的地址。):

    dbpath=D:data
    logpath=D:MongoDBmongo.log
    

    在管理员CMD下输入:mongod --config mongo.config --install --serviceName "MongoDB"。即根据刚创建的mongo.config配置文件安装服务,名称为MongoDB。

    之后就可以通过命令或者在“服务”中控制MongoDB了。

    启动MongoDB服务
    net start MongoDB
    关闭MongoDB服务
    net stop MongoDB
    

    GUI管理器

    之前一直使用一个叫robo3t的GUI管理软件,功能中规中矩。虽然版本不是很新,测试是可以兼容最新的mongoDB的。

    推荐使用官方自带的MongoDB Compass。简洁,强大。在安装mongoDB之后会提示安装。

    如果没有的话,可到在MongoDB的官网上下载,下载需要填写一点信息,可以瞎填,提交就会开始下载。国家最好选在中国或者附近,上次选了大洋彼岸的国家,下载地址根本访问不到。

    MongoDB和关系型数据库不同之处

    操作               关系型            MongoDB
    database	 database	  数据库/数据库
    table		 collection	  数据表/集合
    row          document	  数据记录行/文档
    column		 field		  数据字段/域
    index		 index		  索引/索引
    table joins               表连接/MongoDB不支持
    primary key	 primary key  主键/MongoDB自动将_id字段设置为主键
    

    mongoDB语法

    附带了SQL语句,以便理解。

    查询所有表中信息

    db.users.find()
    select * from users
    

    条件查询

    db.users.find({"username" : "joe", "age" : 27})
    select * from users where "username" = "joe" and age = 27
    

    依据条件查询所有信息

    db.users.find({}, {"username" : 1, "email" : 1})
    select username, email from users
    #明确注意禁止_id值的返回
    db.users.find({}, {"username" : 1, "_id" : 0})
    

    数值范围条件查询

    #$lt(小于) $lte(小于等于) $gt(大于) $gte(大于等于)
    db.users.find({"age" : {"$gte" : 18, "$lte" : 40}})
    select * from users where age >=18 and age <= 40
    

    不等条件查询

    db.users.find({"username" : {"$ne" : "joe"}})
    select * from users where username <> "joe"
    

    表范围查询

    db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}})
    select * from users where ticket_no in (725, 542, 390)
    db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}})
    select * from users where ticket_no not in (725, 542, 390)
    

    同集合多条件查询

    db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]})
    select * form users where ticket_no = 725 or winner = true
    

    pymongo模块用法

    安装pymongo

    pip install pymongo
    

    导入模块

    import pymongo
    

    仅做客户端操作的时

    from pymongo import MongoClient
    

    建立连接

    conn = MongoClient('192.168.0.111', 27017)
    或者
    conn = MongoClient('192.168.0.111:27017')
    

    连接至数据库

    db = conn.mydb
    或者
    db = conn['mydb']
    

    mydb为所要连接的数据库,如果不存在,则创建数据库。

    连接选择数据集合

    myset = db.test
    或者
    myset = conn.mydb.test
    

    test为所要使用的集合,没有则自动创建。

    查看全部集合

    db.collection_names()
    

    查看指定集合中某条记录

    db.Account.find_one({"key":"value"})
    

    查看指定集合的字段

    db.Account.find_one({},{"k1":v1,"k2":"v2"})
    

    查看指定集合中多条记录

    for item in db.Account.find():
        item
    for item in db.Account.find({"Name":"li"}):
        item["Name"]
    

    查看指定集合记录统计

    db.Account.find().count()
    db.Account.find({"key":"value"}).count()
    

    集合查询结果排序

    db.Account.find().sort("Name") #默认为升序
    db.Account.find().sort("Name",pymongo.ASCENDING) #升序
    db.Account.find().sort("Name",pymongo.DESCENDING) #降序
    

    集合查询结果多列排序

    db.Account.find().sort([("Name",pymongo.ASCENDING),("add",pymongo.DESCENDING)])
    

    还有一个find_one()的方法,返回符合条件的一条记录,而find()则是返回返回所有可能的内容。

    通常在需要随机抽出一条内容的情况下使用find_one()更实用。

    更高级的扩展

    下面方法在执行完相应第一个的操作之后,会附加进行另一个操作。

    查找之后进行删除

    find_one_and_delete()
    

    查找之后进行更新

    find_one_and_update()
    

    查找之后进行替换

    find_one_and_replace()
    

    添加记录

    db.Account.insert({"ID":21,"Name":"Ling"})
    

    修改记录

    db.Account.update({"User":"li"},{"$set":{"add":"BJ","pw":"123"}})
    

    删除记录

    db.Account.remove() #全部删除
    db.Test.remove({"key":"value"}) #指定删除
    
  • 相关阅读:
    (6)STM32使用HAL库实现modbus的简单通讯
    (4)STM32使用HAL库实现串口通讯——理论讲解
    (3)STM32使用HAL库操作外部中断——实战操作
    (2)STM32使用HAL库操作外部中断——理论讲解
    对图片进行压缩、水印、伸缩变换、透明处理、格式转换操作1
    文件压缩、解压工具类。文件压缩格式为zip
    Bean与Map的转换 和 Map与Bean的转换
    正则 身份证的验证
    金钱处理工具类 人民币转换为大写
    正则表达式工具类,验证数据是否符合规范
  • 原文地址:https://www.cnblogs.com/xiao3c/p/9646570.html
Copyright © 2011-2022 走看看