每天净瞎搞

关注:AI/CS/数学/自我提升等

0%

《左手MongoDB,右手Redis》第3章 MongoDB快速入门

  • 3.4 MongoDB的基本操作
    • 创建数据库与集合
      • 创建数据库:Robo 3T中,右键小电脑选择“Create Database”
      • 创建集合:在新创建的数据库里,右键“Collections”,选择”Create Collection”
    • 插入单条数据
      • db.getCollection('example_data_1').insertOne({"name":"张小三", "age":18, "address":"上海"})
      • 使用cmd+r运行
    • 批量插入数据
      1
      2
      3
      4
      db.getCollection('example_data_1').insertMany([
      {"name":"kk", "age":20},
      {"name":"ll", "age":21}
      ])
    • 查询所有数据
      • db.getCollection('example_data_1').find({})
      • db.getCollection('example_data_1').find()
    • 查询特定数据
      • db.getCollection('example_data_1').find({'字段1':'值1', '字段2':'值2'})
    • 查询范围值数据
      • 查询’age’字段不小于25的记录
        • db.getCollection('example_data_1').find({'age': {'$gte': 25}})
      • 各个操作符
        1
        2
        3
        4
        5
        大于:$gt
        大于等于:$gte
        小于:$lt
        小于等于:$lte
        不等于:$ne
      • 查询’age’大于21并小于等于24的数据
        • db.getCollection('example_data_1').find({'age': {'$lte': 24, '$gt': 21}})
    • 限定返回哪些字段
      • find命令第1个参数用于过滤不同的记录,第2个参数用于修改返回的字段。如果省略第2个参数,则会返回所有字段
      • db.getCollection('example_data_1').find(用于过滤记录的字典, 用于限定字段的字典)
      • 限定字段的字典的Key为各个字段名,其值只有两个0或1
        • 0表示在全部字段中剔除值为0的这些字段返回
        • 1表示只返回值为1的这些字段
      • 查询数据集,但不返回address和age字段
        • db.getCollection('example_data_1').find({}, {'address':0, 'age':0})
      • 查询数据集,只返回address和age字段
        • db.getCollection('example_data_1').find({}, {'address':1, 'age':1})
    • 查询满足结果的数据集的条数
      • 查询’age’字段不小于25的记录的条数
        • db.getCollection('example_data_1').find({'age': {'$gte': 25}}).count()
    • 返回限定的条数
      • db.getCollection('example_data_1').find().limit(限制返回的条数)
    • 对查询结果进行排序
      • db.getCollection('example_data_1').find({'age': {'$gte': 25}}).sort({'字段名': -1或1})
      • 其中-1表示倒序,1表示正序
    • 修改数据updateOne()和updateMany()
      • sql db.getCollection('example_data_1').updateMany( 参数1:查询语句的第一个字典, {'$set': {'字段1': '新的值1', '字段2': '新的值2'}} )
    • 删除数据
      • 只需把find改成deleteOne或deleteMany即可,对应删除第1条数据和所有满足要求的数据
    • 数据去重
      • db.getCollection('example_data_1').distinct('字段名', 查询语句的第一个字典)
  • 3.5 使用Python操作MongoDB
    • 安装
      • pip install pymongo
    • 连接数据库
      1
      2
      3
      4
      >>> from pymongo import MongoClient
      >>> client = MongoClient('mongodb://192.168.1.53:27017')
      >>> database = client.chapter_3
      >>> collection = database.example_data_1
    • MongoDB与PyMongo的对比
      • 把MongoDB的驼峰命名转化为PyMongo的小写加下划线即可
    • 插入数据insert_one和insert_many
      1
      2
      3
      4
      >>> collection.insert_many([
      ... {'name': 'new_new', 'age': 30},
      ... {'name': 'old_old', 'age': 31}
      ... ])
    • 查询数据find
      1
      2
      3
      >>> rows = collection.find({'age': {'$lt': 30}})
      >>> for row in rows:
      ... print(row)
    • 更新数据
      1
      2
      3
      4
      >>> collection.update_many(
      ... {'name': 'kk'},
      ... {'$set': {'age': 44}}
      ... )
    • 更新或插入数据
      1
      2
      3
      4
      5
      >>> collection.update_many(
      ... {'name': 'kk'},
      ... {'$set': {'age': 44}},
      ... upsert=True
      ... )
    • 删除数据
      • collection.delete_many({'age':0})
  • 3.6 MongoDB与Python不通用的操作
    • 1.空值
      • MongoDB中写作null,Python中写作None
    • 2.布尔值
      • MongoDB中真为true,假为false
      • Python中真为True,假为False
    • 3.排序参数
      • MongoDB: .sort({‘age’: -1})
      • Python: .sort(‘age’, -1)
    • 4.查询_id
      • MongoDB
        • db.getCollection('example_data_2').find({'_id': ObjectId('mxmmmmm')})
      • Python
        1
        2
        from bson import ObjectId
        collection.find({'_id': ObjectId('mxmmmmm')})