zoukankan      html  css  js  c++  java
  • MongoDB

    MongoDB介绍

    最广泛用于地图类系统

    360是中国最大的MongoDB集群应用商

    MongoDB的特性:

    既有非关系型的灵活模式、扩展性,又有关系型的强大查询功能,强大一致性、二级索引。

    设计哲学:

    (1)反范式;(2)水平扩展;(3)高可用性;(4)泛目的

    一、安装

    mysql 3306
    redis    6379
    mongodb    27017

    1.安装

    2.添加环境变量

    3.在cmd中输入mongod,根据报错信息创建/data/db目录

    4.开启mongodb服务端:mongod

    5.开启mongodb客户端:mongo

    二、初级使用

    show dbs 查看当前服务器存在多少DB,只能看到磁盘上的database,我们新建的database不会立马在磁盘上

    use ss1db CreateDatabase 使用不存在的对象即创建该对象 没有即创建

    show tables 查看当前DB中有多少表(Collection)

    (一)mongodb的数据存储结构 

    表——collection

    数据行——document

    user = [{
    name:dragon,
    age:20,
    gender:"man"
    },]

    (二)mongodb的增删改查

    增:

    insert x 官方已经不推荐使用这个LowB的方法了
    
    insertOne({name:"123"}) 插入一条数据行(document)
    
    insertMany([{name:"123"},{name:"234"},{name:"345"}]) 插入多行数据

    查:

    #查的时候没有findMany
    
    findOne({name:"123"}) 查询满足条件的第一条数据
    
    find({name:"123"}) 查询所有满足条件的数据

    改:

    #update x 官方已经不推荐使用这个LowB的方法了
    
    updateOne({name:"123"},{$set:{gender:"man",age:20}}) 
    # 修改满足条件的第一条数据
    
    updateMany({name:"123"},{$set:{gender:"man",age:20}}) 
    # 修改所有满足条件的数据
    # $set: 修改器,将某个Key的值修改为某个值

    删:

    deleteOne({name:"123"}) 删除满足条件的第一条数据
    
    deleteMany({name:"123"}) 删除所有满足条件的数据
    
    remove({})清空数据

    (三)mongodb中的数据类型:

    varchar----------String
    float------------double
    double-----------double
    date-------------ISODate
    int--------------int
    boolean----------boolean
    NUll-------------Null
    array------------Arrays
    object-----------Object

    ObjectID :Documents 自生成的 _id
    String: 字符串,必须是utf-8
    Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
    Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
    Double:浮点数 (没有float类型,所有小数都是Double)
    Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
    Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
    Null:空数据类型 , 一个特殊的概念,None Null
    Timestamp:时间戳
    ISODate:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

    $关键字:数学比较符

    db.student.find({age:{$lt:25}})  # 小于
    
    db.student.find({age:{$lte:25}})  # 小于等于
    
    db.student.find({age:{$gt:23}})  # 大于
    
    db.student.find({age:{$gte:23}})  #大于等于

    $修改器:

    1.$set: 将某个Key的值修改为某个值
    
    2.$unset: 删除字段(field) 
    db.student.updateOne({age:84},{$unset:{head:1}})
    
    3.$inc : 将原有值增加多少 
    db.student.updateOne({age:85},{$inc:{age:1000}})
    
    4.$push: [].append() 在arrays中在最后位置追加一个数据 db.student.updateOne({age:1085},{$push:{hobby:"chezhen"}})
    
    5.$pull: [].remove(item) 在array中删除一个元素 db.student.updateOne({age:1085},{$pull:{hobby:"chezhen"}})
    
    6.$pop : 删除array中的第一个或最后一个元素,-1:第一个 1:最后一个

    $字符的特殊用法:

    符合array检索条件的元素下标
    db.student.updateMany({hobby:69},{$set:{"hobby.$":78}})
    
    遇到array中包含object时使用以下方式:
    
    db.school.updateOne({"price.price":17800},{$set:{"price.$.name":"linux"}})
    
    db.school.updateOne({"price.name":"linux"},{$set:{"price.1.name":"linux云计算"}})


    limit(2) : 选取,从0-2的数据
    skip(2) : 跳过 2 条数据 从第3条数据开始
    sort({age:1}) : 根据age字段进行从小到大的排序(升序) -1:降序

    分页查询:

    limit(count).skip(page+count)

    二、pymongo

    (一)连接字符串:

    mongo_conn = pymongo.MongoClient(host="127.0.0.1",port=27017)   # 建立连接
    mongo_db = mongo_conn["ss1db"]  # 选取数据

    (二)查询:

    res = mongo_db.student.find({"name":"alex"}) 
    # pymongo的Cursor对象需要循环
    for i in res:
    print(i)
    
    res = mongo_db.student.find_one({"age":25}) 
    # 返回的是一个Dict
    print(res)

    (三)增加:

    res = mongo_db.student.insert_one({"name":"nezha","age":20})
    print(res) #inserOneResult
    print(res.inserted_id) # 当前插入对象的_id
    
    res = mongo_db.student.insert_many([{"name":"nezha1","age":20},{"name":"nezha2","age":20}])
    print(res)  #inserManyResult
    print(res.inserted_ids)  # 当前插入所有对象的_id 是个list

    (四)更新:

    res = mongo_db.student.update_one({"name":"nezha1"},{"$set":{"age":22}})
    print(res)  # UpdateResult
    print(res.acknowledged)  # True 更新成功
    
    res = mongo_db.student.update_many({"age":30},{"$set":{"age":25}})
    print(res) # UpdateResult
    print(res.raw_result) # 受影响行数
    print(res.acknowledged) # True 更新成功

    (五)删除:

    res = mongo_db.student.delete_one({"name":"nezha1"})
    print(res) #DeleteResult
    print(res.acknowledged) # True 删除成功
    print(res.deleted_count) # 删除行数 只能是1
    print(res.raw_result) 受影响行数
    
    res = mongo_db.student.delete_many({"age":25})
    print(res) #DeleteResult
    print(res.acknowledged) # True 删除成功
    print(res.deleted_count) # 删除行数 可以大于1
    print(res.raw_result) #受影响行数

    (六)清除数据:

    res = mongo_db.student.remove({})
    print(res) # 受影响行数 返回值 n > 0 清楚成功
    
    
    # 查询_id等于 5b7e0a6eaeb4a3336c0f9b71
    # from bson import ObjectId #必须使用ObjectId去查询_id
    # res = mongo_db.school.find_one({"_id":ObjectId("5b7e0a6eaeb4a3336c0f9b71")})
    # print(res)
    
    limit skip sort:
    sort的用法,与pymysql中的用法及其相似,已经不是mongodb中的sort用法
    res = mongo_db.school.find({}).limit(2).skip(1).sort("name",pymongo.ASCENDING)
    for i in res:
    print(i)
  • 相关阅读:
    Eclipse怎么导入外来项目
    java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)
    java批量读取多个文件并存入数据库
    字符串转日期,出现错误
    tomcat设置默认欢迎页、server.xml配置文件中的标签理解
    个人网站搭建时linux中的相关配置记录(mysql,jdk,nginx,redis)
    linux定时重启tomcat服务的脚本学习
    linux服务器的相关信息查看(端口占用,cpu、内存占用,防火墙,系统信息,vim编辑器使用等)
    java极光推送记录
    @transactional注解,报错后数据库操作回滚失败
  • 原文地址:https://www.cnblogs.com/qiaoqianshitou/p/9576791.html
Copyright © 2011-2022 走看看