Python各种模块mongodb基本api

pymongo相关操作

2017-01-05  本文已影响672人  4ffde5305e8f
  1. 导入库,建立连接
    a. from pymongo import MongoClient
    b. client = MongoClient(host,port)

  2. 创建数据库 myDB (应该叫连接数据库,比较创建数据库更合适)
    a. db = client['myDB'] 或者
    b. db = client.myDB
    c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串
    d. 如果数据库myDB不存在,则重新创建一个,如果存在,则连接已存在的myDB数据库

  3. 建立集合myColletions(相当于sql中的表单)
    a. myColl = db['myColletions'] 或者
    b. myColl = db.myColletions
    c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串
    d. 如果集合myColletions不存在,则重新创建一个,如果存在,则连接已存在的myColletions集合

  4. 插入文档记录(也就是sql中表单的行记录)
    a. 如果插入的集合不存在,则mongoDB自动给你创建一个。
    b. myColl.insert_one(BinaryJson) 插入单条数据
    i. BinaryJson 可以简单理解为 二进制版的json,
    mongoDB自动将json转换我BinaryJson,如无特殊需要插入json即可
    ii. 插入一条Json格式的文档,也就是表单行记录
    iii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,
    并生成一个ObjectId,作为_id字段值。
    iv. 返回一个 insertOneResult对象,它包括inserted_id属性,
    返回一个被插入对象的_id字段值。:
    1) result = myColl.insert_one(json)
    2) coll_id = result.inserted_id
    c. myColl.inssert_many(jsonColletions)插入多条数据
    i. 插入一个json文档集合,一般情况下是 列表,列表的每一个元素,必须是一个json格式数据对象
    ii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,
    并生成一个ObjectId,作为_id字段值
    iii. 返回一个insertManyResult对象,它包括inserted_ids属性,
    返回被插入对象的_id字段值的列表

  5. 查询文档记录(sql中的表单查询)
    a. 查询所有数据
    i. myColl.find() 查询集合中的所有文档记录(表中的行记录)
    1) 返回一个查询结果的游标,可迭代对象,就像open(fileName)函数一样
    a) result = myColl.find() f = open(fileName)
    b) for value in result: for value in f:
    c) print value print f
    d) 输出每一条文档记录(行记录) 输出每一行内容
    2) 相当于 sql中的:
    a) select * from myColl

    b. 查询限定操作(也就是sql中的 where 语句)
         i. myColl.find({'name':'liming'}) 查询集合中 字段 name = liming的记录
             1) 注意:括号内部是一个 字典,或者 json格式的数据(其实都一个卵样)
             2) 字典 key = 集合内文档的字段,value = 字段的值
             3) 相当于sql中:
                 select * 
                 from myColl 
                 where name = 'liming'
         ii. 一些高级操作:
             1) 比较操作:
                 a) 小于比较:
                     i) myColl.find({'age':{'$lt':30}}
                     ii) 查询age字段值 小于30的所有文档记录
                     iii) 注意:括号内是一个 字典
                     iv) 字典 key = 文档字段,value 是一个字典,其中 key = 比较操作符, value =比较值
                     v) 相当于sql中:
                         select * 
                         from myColl
                         where age < 30
                 b) 其他比较操作符
                     $gt 大于
                     $gte    大于等于
                     $lt 小于
                     $lte    小于等于
                     $ne 不等于
             2) 组合查询:
                 a) 逻辑与 and 
                     i) myColl.find({'name':'liming','age':30})
                     ii) 查询 name = liming 和 age = 30 的所有文档记录
                     iii) 注意:括号内是一个字典,两个元素。用 逗号分隔开,key = 字段,value=字段值
                     iv) 相当于sql:
                         select * 
                         from myColl
                         where name = 'liming' and age = 30
                 b) 逻辑或 or
                     i) myColl.find({'$or':[{'name':'liming'},{'age':30}]})
                     ii) 查询name = 'liming' 或 age = 30的所有文档记录
                     iii) 注意:括号内是一个字典,key = '$or' 逻辑或操作符,value = 一个列表
                         列表内是两个字典,key = 字段,value=字段值
                     iv) 相当于sql:
                         select * 
                         from myColl
                         where name = 'liming' or age = 30
             3) 对查询结果进行排序:
                 a) myColl.find().sort('name',pymongo.DESCENDING)
                     i) 对查询结果按照字段 name进行排序,默认为升序,可以指定排序方向,
                        DESCENDING是降序
                     ii) 相当于sql:
                         select *
                         from myColl
                         order by name DESC
                 b) myColl.find().sort([{'name':pymongo.DESEDING',{'age':pymongo.DESEDING'}])
                     i) 对查询结果排序,指定排序方向为 降序,默认为升序。
                         先按照name字段排序,在按照age字段排序
                     ii) 相当于sql:
                         select * 
                         from myColl
                         order by name DESC ,age DESC
                     DESC关键字只适用于 DESC前面的字段,需要的话,可以对每个字段指定一次 DESC
    
  6. 更新数据:
    a. 更新指定字段
    i. myColl.update_one() 更新一条文档,只更新找到的第一条记录
    1) 包含三个参数:
    a) 过滤器(筛选器),筛选出符合条件的文档
    b) 更新操作
    c) 一些相关的更新参数设置

             2) myColl.update_one({'age':30},{'$set':{'name':'zhangsan'}},upsert=True)
                 a) 更新查询出来的符合 age = 30的第一条文档记录,
                 b) 使用$set操作符 更新字段name 为 ’zhangsan‘
                 c) upsert = True 表示如果需要更新的字段不存在,
                    则mongoDB自动创建该包含该字段的文档,并更新该字段
                     i) 默认为False,表示文档不存在时,不创建新的文档
                 d) 注意:第二个参数是一个字典  
                         key = $set 更新操作符 value = 需要更新的字段,以及需要更新的值。。
    
             3) 相当于:
                 update myColl
                 set name = 'zhangsan'
                 where age = 30
    
         ii. myColl.update_many() 批量更新一组文档,更新找到的所有记录
             1) 使用方法与update_one()一样
             2) update_many()更新找到的所有记录,update_one()只更新找到的第一条记录。
    
  7. 清空集合内容(sql中清空表单内容)
    a. myColl.delete_one() 删除指定字段文档记录
    i. 删除一条记录,值删除找到的第一条记录
    ii. myColl.delete_one({'age':30})
    1) 删除age = 30 的所找到的第一条记录
    iii. 相当于:
    delete from myColl
    where age = 30

      b. myColl.delete_many()
         i. 删除找到的所有记录
         ii. 使用方法与 delete_one()一样
             1) 只是,delete_one()只删除找到的第一条文档记录
             2) delete_many()删除找到的所有文档记录
    
     c. myColl.delete_many({}) 
         i. 一次性清空整个集合的所有文档记录
         ii. 相当于:
             delete from myColl
    
  8. 删除集合(sql中删除表单)
    a. myColl.drop()
    删除一个集合,彻底的删除,而不是清空
    b. 相当于:
    i. drop table myColl

  9. 数据聚合:
    a. 数据的分组,以及统计:
    i. 根据一个字段分组文件,并计算总数:
    1) myColl.aggregate( [ {'$group' : {'_id' : '$age' , 'count':{'$sum':1} } } ]
    对字段age的记录进行分组,并计算age字段相同值的总和
    2) 括号里面是个列表
    a) 元素是一个字典,key = '$group' 分组操作符
    b) value = 一个字典,两个元素。
    i) 第一个元素
    One. key = '_id' ,这个是固定不变,mongoDB按照id来查找文档
    Two. value = '$age' 需要分组的字段,必须以
    ii) 第二个元素
    One. key = 'count' 设立一个字段别名,来显示统计值
    Two. value = '$age' 需要分组的字段,必须以 $ 开头
    Three. value =一个字典:
    First. key = '$sum' 聚合操作符:计算总和操作
    Second. value = 1 表示计算查询到的所有值
    3) 相当于:
    select age as _id,count(*) as count
    from myColl
    group by age

         ii. 筛选并分组文档:
             1) myColl.aggregate([{[{'$match':{'name':'lisi','age':30}},{'$group':{'_id':'$age','count':{'$sum':1}}}])
                 a) 查询name = 'lisi' and age = 30的文档记录
                 b) 并对 age字段进行分组,并计算age字段相同值的总和
                 c) $match 筛选操作符 值为需要筛选的内容
             2) 相当于:
                 select age as _id,count(*) as count
                 from myColl
                 group by age
                 having name = 'list' and age = 30
     b. 其聚合操作符:
    
    image.png
  1. PyMongo上的索引
    a. 索引可以对查询的高效执行起到支持。如果没有索引,MongoDB必须进行全表扫描,
    即扫描集合中的每个文档,来选择符合查询条件的文档。如果一个适当的索引存在于一个查询中,
    MongoDB可以使用索引限制必须检查文档的数量。
    b. 创建索引
    要创建一个升序的索引,指定pymongo.ASCENDING为索引类型()。
    要创建一个降序的索引,指定pymongo.DESCENDING为索引类型()。
    i. myColl.creater_index()
    1) 为集合myColl创建一个索引
    2) MongoDB会在创建文档的时候自动为_id字段创建索引。
    3) 只会在索引不存在的时候创建一个索引
    ii. 指定索引:
    1) myColl.create_index([('name',pymongo.ASCENDING)]
    2) 为集合中的 name字段创建 自增(升序)索引
    iii. 该方法返回创建索引的名字
    c. 创建复合索引:
    i. myColl.create_index([('name',pymongo.ASCENDING),('age',pymongo.DECENDING)])
    ii. 在字段 name 和 age 上 创建一个 复合索引
    iii. 指定name索引为升序,age索引为降序
    iv. 索引的名字为:name索引_age索引
上一篇 下一篇

猜你喜欢

热点阅读