MongoDB

作者: Python野路子 | 来源:发表于2018-09-10 21:45 被阅读0次

    认识mongodb

    • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
    • MongoDB中将数据存储为一个文档,文档由键值对(key=>value)组成,MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

    MongoDB简介

    • 基于分布式文件存储的开源数据库系统。
    • 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    • 将数据存储为一个文档,文档类似与Json格式。
    {
        name:"小明",
        age:16,
        address: {city:"长沙", country:"china"}
    }
    

    MongoDB数据模型

    • 和关系型数据库一样,MongoDB存在数据库的概念,一个MongoDB可以创建多个数据库。
    • 多个键及其关联的值有序地放置在一起就是文档,文档时MongoDB中数据的基本单元,是MongoDB的核心概念,很类似关系数据库中的行(记录)。
    • 集合就是一组文档的组合,集合可以被看作关系型数据库中的表。
    RDBMS(关系型数据库管理系统) MongoDB
    Database(数据库) Database(数据库)
    Table(表) Collection(集合)
    Record(记录) Document(文档)
    image.png

    MongoDB进入与退出

    mongo
    exit
    

    库、集合操作

    库级操作语句

    查看所有数据库(空库不会显示)show dbs
    image.png
    切换/创建数据库use 数据库
    image.png
    • use:有就切换,没有就创建
    查看当前所在库db
    image.png
    删除当前数据库:db.dropDatabase()
    image.png

    集合操作

    查看当前数据库的集合 show collections
    创建集合 (用引号引起来) db.createCollection(name, options)
    删除集合db.集合名称.drop()
    image.png

    文档操作

    插入
    db.集合名称.insert(document)    
    #插入文档,    集合不存在会自动创建, 不能插入重复id的数
    #_id 是12个字节十六进制数在一个集合的每个文档是唯一的。如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId
    
    db.student.insert({name:'xiaobai'})
    db.student.insert({name:'xiaobai', age:18})
    db.student.insert({_id:1, name:'xiaobai', age:18})
    #一次性插入多个
    db.student.insert([
        {name:'juhao', sex:'男', age:18},
        {name:'nanbei', sex:'男', age:19},
        {name:'budong', sex:'男', age:20},
    ])
    
    image.png
    查询
    db.集合名称.find()              #查询所有
    db.集合名称.find().pretty()     #结构化显示
    
    db.集合.find({name:10}).pretty()          where name = 10
    db.集合.find({name:{$ne:10} }).pretty()       where name != 10
    db.集合.find({name:{$gt:10} }).pretty()       where name > 10
    db.集合.find({name:{$lt:10} }).pretty()       where name < 10
    #后面加个e就是加等于
        
    #and逻辑
    {$and:[{expression1}, {expression1}, ...]   }
    #or逻辑
    {$or:[{expression1}, {expression1}, ...]   }
    
    #where sex='男' and age > 18
    db.table.find({
        $and:[
            {sex:'男'}, {age:{$gt:18}}
        ]
    })
    
    #where sex='女' or age =18
    db.table.find({
        $or:[
            {sex:'女'}, {age:18}
        ]
    })
    
    操作符 描述
    $ne 不等于
    $gt 大于
    $lt 小于
    $gte 大于等于
    $lte 小于等于

    更新

    db.table.insert({
        name: 'juhao', 
        age: 18,
        height: 180,
        sex:'男',
        virtue: ['帅', '帅', '帅'],
    })
    
    db.table.update({sex:'男'},[{age:20},{height:180}])  
    #更新第一条找到的文档全部值  
    
    db.table.update({sex:'男'}, {$set:{age:666, agee:6666}}) 
    #修改第一条找到的文档, key不存在就添加
    
    
    db.table.update({sex:'男'}, {$set:{sex:'女'}}, {multi:true})  #更新满足条件的全部数据
    
    #前面查询的条件也可以用在这里, wherer sex=男 and age>18
    db.table.update(
        {$and:[{sex:'男'}, {age:{$gt:18}}]}, 
        {$set:{age:666}},
    )
    

    删除

    db.集合名称.remove( <query>, <justOne> )
    db.table.remove({age:18})       #删除所有满足条件的
    db.table.remove({sex:'男'}, {justOne:true})  #删除一条
    
    #where sex='男' and age>18
    db.table.remove({
        $and:[
            {sex:'男'}, {age:{$gt:18}}
        ]
    })
    

    Python与MogoDB交互

    操作步骤

    • 下载模块:
    pip install pymongo
    
    • 建立连接:client = pymongo.MongoClient()
    • 指定数据库:db = client[数据库名]
    • 指定集合:collection=db[集合名]

    基本使用

    import pymongo
    
    
    #建立连接:
    client = pymongo.MongoClient()
    
    #指定数据库:
    db = client['cainiao']
    
    #指定集合:
    collection = db['student']
    
    #查找一条文档:
    result = collection.find_one()
    print(result)
    
    #查找所有:
    all = collection.find()
    print(all)
    print(list(all))
    
    #添加一条文档:
    add_result = collection.insert_one({'name':'xiaotan','age':18})
    print(add_result)
    
    #添加多条:
    add_result_all = collection.insert_many([{'name': 'xiao1', 'age': 18}, {'name': 'xiao2', 'age': 18}])
    print(add_result_all)
    
    #删除一条文档:
    del_result = collection.delete_one({'age': 18}) #删除age=18的一条文档
    print(del_result)
    
    #删除多条:
    del_result_all = collection.delete_many({'age': 18})#删除age=18的全部文档
    print(del_result_all)
    
    #修改一条文档:
    collection.update_one({'age': 19},{'$set':{'name':'cainiao110'} }) #将age=19的第一条记录,修改name指,记住要用$set
    
    #修改多条:update_many()
    collection.update_many({'name':{'$ne':'xiaobai'}}, {'$set': {'age': 19}})
    

    练习

    1. 将MongoDB的find, insert, update, remove方法封装成类。

    相关文章

      网友评论

          本文标题:MongoDB

          本文链接:https://www.haomeiwen.com/subject/ezifgftx.html