• mongodb 数据库


    1.mongodb是一个基于分布式存储的数据库。由c++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

    2.优势

      易扩展:
      大数据量,高性能
      灵活的数据模型
    3.服务端mongodb的启动:

      启动:sudo service mongod start
      停止:sudo service mongod stop
      重启:sudo service mongod restart
      查看是否启动成功:ps ajx|grep mongod
      配置文件的位置:/etc/mongod.conf
      默认端口:27017
      日志的位置:/var/log/mongodb/mongod.log
      客户端mongo

    4.启动本地客户端:mongo
      查看帮助:mongo --help
      退出:exit ctrl+c
    5.基础命令:

      查看当前的数据库: db
      查看所有的数据库:show dbs/show databases
      查看当前数据库信息:db.stats()
      切换数据库: use db_name
      删除当前的数据库: db.dropDatabses()

    6.不手动创建集合:

      向不存在的集合中第一次加入数据时,集合会被创建出来


    7.手动创建集合:

      db.createCollection('sub',{capped:true,size:10})
      参数capped:默认值为false表示不设置上限,值为true表示设置上限
      参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
     查看集合: show collections

     查看集合中的元素:db.集合名称.find()

     删除集合:db.集合名称.drop()

    添加:

    db.集合名称.insert(document)

    db.student.insert({
    'sname':'zhangsan',
    'age':20,
    'addr':'baoshengli'
    })

    更新:

    db.集合名称.update(<quary>,<update>,{multi:<boolean>})
    db.student.update({sname:'caocao'},{$set:{sname:'caozhi'}})
    删除:

    db.集合名称.remove(<query>,)
    db.student.remove({sname:'zhangsan'})
    保存:

    db.集合名称.save(document)
    如果文档的_id已经存在则修改,如果文档的_id不存在则添加
    db.stu.save({_id:'20160102','name':'yk',gender:1})

     二、数据查询

    基本查询:

      方法find():查询

      db.集合名称.find({条件文档})

      方法findOne():查询,只返回第一个

      db.集合名称.findOne({条件文档})

      方法pretty():将结果格式化

      db.集合名称.find({条件文档}).pretty()

    比较运算符:

      等于,默认是等于判断,没有运算符

      小于:$lt

      小于或等于:$lte

      大于:$gt

      大于或等于:$gte

      不等于:$ne

      db.stu.find({age:{$gte:18}})

    逻辑运算符

      逻辑与:默认是逻辑与的关系

    db.stu.find({age:{$gte:18},gender:1})

    逻辑或:使用$or

    db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})

    and和or一起使用

    db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})

    范围运算符:

    使用"$in","$nin" 判断是否在某个范围内
    db.stu.find({age:{$in:[18,28]}})
    使用正则表达式

    使用//或$regex编写正则表达式
    db.stu.find({name:/^黄/})
    db.stu.find({name:{$regex:'^黄'}}})

    自定义查询:

    使用$where后面写一个函数,返回满足条件的数据

    查询年龄大于30的学生

    db.stu.find({$where:function(){return this.age>30}})

    $type的使用--查询指定类型

    db.student.find({friends:{$type:'array'}})

    limit:

    方法limit():用于读取指定数量的文档

    db.集合名称.find().limit(number)

    查询2条学生信息

    db.stu.find().limit(2)

    skip:

    方法skip():用于跳过指定数量的文档

    db.集合名称.find().skip(NUMBER)

    查询从第3条开始的学生信息

    db.stu.find().skip(2)

    一起使用limit和skip

    查询第5至8条数据
    db.stu.find().limit(4).skip(5)
    db.stu.find().skip(5).limit(4)

    投影:

    在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

    对于需要显示的字段,设置为1即可,不设置即为不显示

    db.集合名称.find({},{字段名称:1,...})

    对于_id列默认是显示的,如果不显示需要明确设置为0

    db.stu.find({},{_id:0,name:1,gender:1})

    排序:

    方法sort(),用于对结果集进行排序

    db.集合名称.find().sort({字段:1,...})

    参数1为升序排列

    参数-1为降序排列

    根据性别降序,再根据年龄升序

    db.stu.find().sort({gender:-1,age:1})

    统计个数

    方法count()用于统计结果集中文档条数

    db.集合名称.find({条件}).count()

    db.集合名称.count({条件})

    统计男生人数

    db.stu.find({gender:1}).count()

    统计年龄大于20的男生人数

    db.stu.count({age:{$gt:20},gender:1})

    消除重复

    方法distinct()对数据进行去重

    db.集合名称.distinct('去重字段',{条件})

    查找年龄大于18的性别(去重)

    db.stu.distinct('gender',{age:{$gt:18}})

    三,聚合aggregate

    - 聚合主要用于计算数据,类似sql中的sum(),avg()
    - db.集合名称.aggregate([{管道:{表达式}}])

    - 常用管道
    - $group:将集合中的文档分组,可用于统计结果
    - $match:过滤数据,只输出符合条件的文档
    - $project:修改输入文档的结构,如:重命名、增加、删除字段
    - $sort :将输入文档排序后输出
    - $limit :限制聚合管道返回的文档数
    - $skip:跳过指定数量的文档,并返回余下的文档
    - $unwimd:将数组类型的字段进行拆分

    - 表达式
    - $sum:计算总和
    - $avg:计算平均值
    - $min:获取最小值
    - $max:获取最大值
    - $push:在结果文档中插入值到一个数组中
    - $first:根据资源文档的排序获取第一个文档数据
    - $last:根据资源文档的排序获取最后一个文档数据

     $group的注意点:

    - $group对应的字典中有几个键,结果中就有几个键
    - 分组依据需要放到`_id`后面
    - 取不同的字段的值需要使用`$`, `$gender`, `$age`

    - db.stu.aggregate(
    {$group:{_id:"gender",count:{$sum:1}}}
    )

    - 按照gender进行分组,获取不同数据的个数和平均年龄
    - db.stu.aggregate(
    {$group:{_id:"gender",count:{$sum:1},avg_age:{$avg:"age"}}},
    {$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
    )

    - 按照hometown进行分组,获取不同组的平均年龄
    - db.stu.aggregate(
    {$group:{_id:"hometown",mean_age:{$avg:"$age"}}}
    )

    - 按照$group统计整个文档
    - db.stu.aggregate(
    {$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
    )

    五、索引

    - 在默认情况下索引字段的值可以相同
    - 创建唯一索引(索引的值是唯一的)
    - 查看当前集合的所有索引:db.t1.getIndexes()
    - 删除索引:db.t1.dropIndex({'索引名称':1})

     mongodb 的备份与解压

    - mongodump -d douban -o ./ ----备份
    - mongorestore -d douban2 --dir douban ----解压

     六、与python的交互

    - 我的:client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/')
    - 创建客户端链接对象
    - client = MongoClient()
    - print(client)
     
    - 创建集合
    - course=db.course
    
    from pymongo import MongoClient
     
    client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/')
    print(client)
     
    db = client.mydb
    print(db)
    course = db.course
     
     添加
     r = course.insert({'cname': 'python', 'grade': 4})
     print(r)
     
     course_list = [{'cname':'mysql','grade':3},{'cname':'html','grade':3},{'cname':'javascript','grade':4}]
     r = course.insert(course_list)
     print(r)
     
     更新
     r = course.update({'cname': 'javascript'}, {'$set': {'grade': 3}})
     print(r)
     
     删除
     r = course.remove({'cname':'html'})
     
     查询
    r = course.find().sort([('grade',1)])
    print(r)
     
    for data in r:
        print(data)
    
    Key Binding Resolver
    Linter
    Severity     Provider     Description    Line 
    Git
    GitHub
    Create Repository
    Initialize a new project directory with a Git repository
    Create repository
    一路独行,遇见最好的自己!!!
  • 相关阅读:
    linux学习网站
    Go select的使用和实现原理
    Python 多进程数据共享及异步调用 multiprocessing Manager ThreadPoolExecutor
    算法学习列表
    Jenkins build 的 lock resource
    Telegraf Input Plugin
    【转】Linux系统硬盘的IOPS测试
    SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者
    SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
    SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API
  • 原文地址:https://www.cnblogs.com/rungang/p/11518457.html
Copyright © 2020-2023  润新知