181203-Python之Mongo基本使用姿势

文章目录
  1. 1. 引入依赖
  2. 2. 建立连接
  3. 3. 获取db
  4. 4. 集合操作
    1. a. 插入数据
    2. b. 查询
    3. c. 更新
    4. d. 删除
  • II. 其他
    1. 0. 参考
    2. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    3. 2. 声明
    4. 3. 扫描关注
  • 借助pymongo实现mongo的基本操作

    1. 引入依赖

    1
    2
    import pymongo
    from pymongo import MongoClient

    2. 建立连接

    开始第一步就是连接mongodb,有两种常见的连接方式

    方式一

    1
    2
    uri = "mongodb://user:password@localhost:port/the_database?authMechanism=SCRAM-SHA-1"
    client = MongoClient(uri)

    方式二

    1
    2
    3
    4
    5
    6
    client = MongoClient('localhost',
    port = 27017,
    username='user',
    password='password',
    authSource='the_database',
    authMechanism='SCRAM-SHA-1')

    说明

    MongoDB 3.0(对应pymongo2.8)之后默认使用“SCRAM-SHA-1”加解密;之前使用的是“MONGODB-CR”,可以使用authMechanism指定;同时可以使用authSource指定应用加解密的database,默认是admin。

    3. 获取db

    指定操作的db,然后接下来就可以对db中的集合进行操作

    1
    2
    db = client['db_name']
    # db = client.db_name # 也可以

    4. 集合操作

    a. 插入数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import datetime

    post = {"author": "Mike",
    "text": "My first blog post!",
    "count": 12345,
    "tags": ["mongodb", "python", "pymongo"],
    "date": datetime.datetime.utcnow()}

    post_id = db['test_collection'].insert_one(post).inserted_id

    上面这个每执行一次,插入一个document,对于批量插入,可以使用 insert_many 函数,传入一个列表的参数即可

    b. 查询

    利用 find_one 查找一条匹配的文档

    1
    2
    record = db['test_collection'].find_one()
    print(record)

    如果需要排除查询文档中某些字段,可以通过设置field的值为0,

    1
    2
    record = db['test_collection'].find_one({}, {"_id": 0})
    print(record)

    根据查询条件进行检索,可以如下使用

    1
    2
    record = db['test_collection'].find_one({"author": "Mike"}, {"_id": 0})
    print(record)

    or查询

    第一个参数,可以使用 { '$or': [ 查询条件, 查询条件 ] }

    1
    2
    record = db['test_collection'].find_one({'$or': [{"author": "Mike"}, {"author": "Jake"}], {"_id": 0})
    print(record)

    and与or查询

    字典中的不同的key组合就是and,基本语法为 db.col.find({key1:value1, key2:value2}).pretty()

    1
    2
    record = db['test_collection'].find_one({count: 12345, '$or': [{"author": "Mike"}, {"author": "Jake"}], {"_id": 0})
    print(record)

    数字比较

    不同于mysql直接使用符号,对于比较会用形如$lt的符号来代替

    操作 格式 实例 等效sql
    等于 {key: value} db['test_collection].find_one({'count': 123}) count=123
    小于 {key: {'$lt': value}} db['test_collection].find_one({'count': {'$lt': 123} }) count<123
    小于或等于 {key: {'$lte': value}} db['test_collection].find_one({'count': {'$lte': 123} }) count<=123
    大于 {key: {'$gt': value}} db['test_collection].find_one({'count': {'$gt': 123} }) count>123
    大于或等于 {key: {'$gte': value}} db['test_collection].find_one({'count': {'$gte': 123} }) count>=123
    不等于 {key: {'$ne': value}} db['test_collection].find_one({'count': {'$ne': 123} }) count!=123

    c. 更新

    更新提供了两种方式,一个是增量更新,一个是覆盖更新

    增量更新update

    语法定义如下

    1
    2
    3
    4
    5
    6
    7
    db.collection.update(
    <query>, # 查询条件
    <update>, # 更新的值
    {
    upsert: <boolean> # 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
    }
    )

    一个实际的更新case

    1
    mycol.update_one({'author': 'Mike'}, {'$set': { 'text': 'hello', 'date': datetime.datetime.now()}})

    覆盖更新save

    语法定义如下

    1
    db.collection.save({document})

    这个表示用document的内容来替换已有文档,从接口签名上来看,不推荐使用这种方式

    d. 删除

    和查询的使用方式差不多,只不过最终的效果是删除而已

    1
    db.collection.delete_one({query})

    实例如下

    1
    mycol.delete_one({'author': 'Mike'})

    II. 其他

    0. 参考

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    知识星球

    goals

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×