zoukankan      html  css  js  c++  java
  • MongoDB与pymongo学习笔记

    一、什么是MongoDB?

      1) MongoDB是有C++编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加多的节点,可以保证服务器性能。

      2) MongoDB旨在为web应用提供可扩展的高性能数据存储解决方案。

      3)MongoDB将数据存储为一个文档,数据结构由键值key->value对组成,MongoDB文档类型类似于json对象,字段值可以包含其他文档、数组及文档数组。


    二、操作Mongo数据库

      1. 使用/创建数据库:use 数据库名,如果数据库不存在则创建,否则切换至指定数据库。

      ==> 如果是新创建数据库后使用show dbs,发现创建的数据库不在列表内,则需要向数据库中插入一条数据后才能展示出来

      2. 删除数据库:db.dropDatabase()

      ==> 前提:使用当前数据库

      3. 查看所有数据:show dbs

      4. 查看当前正在使用的数据库:1)db      2)db.getName()

      5. 断开连接:exit

      6. 查看命令api:help

    三、集合操作

      1. 查看当前数据库下有哪些集合:show collections

      2. 创建集合

      ==> db.createCollection("集合名")

      ==> db.集合名.insert({name:"yxj", age:18, gender:1, address:"四川", isDelete:false})

      ==> 区别:前者是创建一个空的集合,后者是创建一个空的集合并添加一个文档。

      3. 删除当前数据库中的集合

      ==> db.集合名.drop()

    四、文档操作(重点)

      1. 插入文档

      ==> 使用insert()方法:db.集合名.insert(文档)

        可以插入一条,也可以插入多条。db.集合名.insert([文档1, 文档2, 文档3, ...])

        栗子:db.student.insert({name:"yxj", age:18, gender:1, address:"四川", isDelete:false})

        db.student.insert([{name:"yxj", age:18, gender:1, address:"四川", isDelete:false},{name:"yh", age:20, gender:0, address:"山西", isDelete:false}])

      ==> 使用save()方法:db.集合名.save(文档)

        如果不指定_id字段,save()同insert(),如果指定_id字段,则会更新_id字段的数据

        栗子:db.student.save({name:"yxj", age:18, gender:1, address:"四川", isDelete:false})

        db.student.insert({_id:ObjectId("5f32658cad6df702d29bf9a3"), name:"yxj", age:18, gender:1, address:"四川", isDelete:false})

      2. 更新文档
      ==> update()方法:
        db.集合名.update(
          query,
          update,
          {
            upset:<boolean>,
            multi:<boolean>,
            writeConcern:<document>
          }
        )
        参数说明:
          query:update的查询条件,类似于sql中的update语句内的where子句后的内容
          update:update的对象和一些更新的操作符($set,$inc等)。$set:直接更新,$inc:在原有的基础上累加后更新
          upset:可选,如果不存在update的记录,是否用作新数据插入进去,默认为false
          multi:可选,只更新找到的第一条记录,默认为false,如果为true,则更新查找出来的所有数据
          writeConcern:可选,抛出异常的级别

        栗子:db.student.update({name:"yxj"},{$set:{age:3}})
                      ⬇      ⬇
                     query    update
      ==> save()方法
      区别:update方法用于更新已存在的文档,save通过传入的文档替换已有文档(伪更新)


      3. 删除文档
        说明:在执行删除remove()方法前,先执行find()方法查找要删除的数据是否存在。
      ==> remove()方法:
        db.集合名.remove(
          query,
          {
            justOne:<boolean>,
            writeConcern:<document>
          }
        )
        参数说明:
          query:可选,筛选要删除的文档的条件,不指定时,删除全部文档
          justOne:可选,值为true/1时,只删除一个文档
        栗子:db.student.remove({name:"yh"})

      4. 查询文档
      ==> find()方法:db.集合名.find()
      栗子:db.student.find()
      ==> find()方法查询指定列:
        db.集合名.find(
          query,
          {
            <key>:1,
            <key>:1,
          }
        )
        参数说明:
          query:查询条件
          key:要显示的字段,1表示显示
        栗子:db.student.find({gender:0}, {name:1, age:1})
      ==> pretty()方法:以格式化的方式来显示文档
      db.集合名.find().pretty()
      ==> findOne()方法:查询匹配结果的第一条数据
      db.集合名.findOne()

      5. 查询条件操作符
        条件操作符用于比较两个表达式并从MongoDB集合中获取数据。
      ==> 大于操作:$gt
        db.集合名.find({<key>:{$gt:<value>}})
        栗子:db.student.find({age:{$gt:20}})             #  年龄>20
      ==> 大于等于操作:$gte
        db.集合名.find({<key>:{$gte:<value>}})
      ==> 小于操作:$lt
        db.集合名.find({<key>:{$lt:<value>}})
      ==> 小于等于操作:$lte
        db.集合名.find({<key>:{$lte:<value>}})
      ==> 等于操作:
        db.集合名.find({<key>:<value>})
      ==> 大于等于和小于等于:
        db.集合名.find({<key>:{$gte:<value>, $lte:<value>}})
      ==> 使用_id进行查询:
        db.集合名.find({"_id":ObjectId("id值")})
      ==> 查询某个结果集的数据条数:
        db.集合名.find().count()
      ==> 查询某个字段的值当中是否包含另一个值:
        db.集合名.find({name:/包含值/})
        栗子:db.student.find({name: /xj/})        # 名字中包含xj的
      ==> 查询某个字段的值是否以另一个值开头:
        db.集合名.find({name:/^包含值/})
        栗子:db.student.find({name: /^y/})       # 名字以y开头的

      6. 条件查询 and 和 or
      ==> and条件:
        db.集合名.find({条件1, 条件2, 条件3, ... , 条件n})
        栗子:db.student.find({gender:1, age:{$gt:18}})        # 性别为男,且年龄大于18的
      ==> or条件:
        db.集合名.find({$or: [{条件1}, {条件2}, {条件3}, ... , {条件n}]})
        栗子:db.student.find({$or: [{age:17}, {age:{$gt: 20}}]})         # 年龄等于17或者大于20的
      ==> and和or联合使用:
        db.集合名.find({条件1, 条件2, $or:[条件1, 条件2, 条件3, ... , 条件n]})

      7. limit 和 skip
      ==> limit()方法:读取指定数量的数据记录
        db.集合名.find().limit(数字)
      ==> skip()方法:跳过指定数量的数据
        db.集合名.find().skip(数字)
      ==> skip()方法与limit()方法联合使用:用于实现数据分页
        db.集合名.find().skip(数字).limit(数字)

      8. 排序
      ==> sort()方法
        db.集合名.find().sort({<key>:1/-1})            # 1 升序    -1 降序
        栗子:db.student.find().sort({age:1})         #  按照年龄升序排序

     五、pymongo的使用

      1. 安装:pip install pymongo

      2. 使用

      ==> 添加文档:

    from pymongo import MongoClient
    
    # 连接服务器
    # conn = MongoClient(host, port)
    conn = MongoClient("host", 27017)     # host:主机地址,mongo默认端口号:27017
    
    # 连接数据库
    # 方法一:db = conn.数据库名
    # 方法二:db = conn["数据库名"]
    db = conn["mydb"]
    # 认证,如果数据库未设置,则可省略此步骤
    db.authenticate("name", "password")
    
    # 获取集合
    # 方法一:collection = db.集合名
    # 方法二:collection = db["集合名"]
    collection = db["student"]
    
    # 添加文档
    collection.insert({"name": "yanxiujuan", "age": 18, "gender": 0})
    
    # 断开连接
    conn.close()

      ==> 更新文档

    from pymongo import MongoClient
    
    client = MongoClient("host", 27017)
    
    db = client["db_name"]
    collection = db["collection_name"]
    
    # 更新文档
    collection.update({"name": "yxj"}, {"$set": {"age": 18}})
    
    client.close()

      ==> 删除文档

    from pymongo import MongoClient
    
    client = MongoClient("host", 27017)
    
    db = client["db_name"]
    collection = db["collection_name"]
    
    # 删除文档
    collection.remove({"name": "yxj"})
    
    client.close()

      ==> 查询文档(重点)

    from pymongo import MongoClient
    from bson.objectid import ObjectId
    import pymongo
    
    
    client = MongoClient("host", 27017)
    
    db = client.mydb
    
    collection = db.student
    
    # 查询文档
    result = collection.find({"age": {"$gt": 18}})
    
    # 如果是多条数据,使用for循环取数据
    for row in result:
        print(row)
        print(type(row))     # dict类型
    
    # 统计查询
    result2 = collection.find({"age": {"$gt": 18}}).count()
    
    # 根据id查询 --> 需要引入三方库 from bson.objectid import ObjectId
    result3 = collection.find({"_id": ObjectId("id值")})
    
    # 排序
    # 1)升序
    result4 = collection.find({}).sort("age")
    # 2)降序 --> 需要引入pymongo库 import pymongo
    result5 = collection.find({}).sort("age", pymongo.DESCENDING)
    
    # 分页
    result6 = collection.find().skip(3).limit(5)    # 跳过3条,拿5条
    
    client.close()
  • 相关阅读:
    iOS系列译文:自定义Collection View布局
    iOS系列译文:整洁的表视图代码
    各种类型的电影排行榜-movie路线
    学习正则
    sublime text 配置golang开发环境
    百度地图 Javascript API 笔记
    Sublime Text 3 若干问题解决办法
    无法修改系统Host的解决办法
    守望先锋overwatch美服外服设置方法
    Steam游戏黑屏与游戏直接安装方法
  • 原文地址:https://www.cnblogs.com/panpanda/p/13810172.html
Copyright © 2011-2022 走看看