• MongoDB常用命令


    查看当前数据库:db
    查看所有数据库:show dbs / show databases
    切换数据库(不存在则创建,在没有真正插入数据以前,使用show dbs,查看不到):use database_name
    删除当前数据库:db.dropDatabase()


    创建集合:
      创建空集合:db.createCollection(name,options)
        db.createCollection('ts1')
        db.createCollection('ts2', {capped:true,size:10})
      capped:默认值false表示不设置上限,true表示设置上限
      size:当capped为true时需要指定该参数,表示上限大小,当文件到达上限时,会将之前的数据覆盖,单位为字节
      使用插入命令,集合不存在则创建:db.ts2.insert({name:"xiaohong"})


    数据类型
      Object ID:文档ID
      string:字符串,必须是有效的utf-8
      Boolean:布尔类型false或者true
      integer:整型
      double:浮点型
      arrays:数组或者列表,多个值存储到一个键
      object:用于嵌入式的文档,即一个值为一个文档
      null:存储Null值
      timestamp:时间戳
      date:存储当前日期或者时间的Unix时间格式

    查看所有集合:show collections
    删除集合:db.ts1.drop()
    集合中插入数据:
      insert:当插入的数据的__id相同时会报错
      db.ts2.insert({_id:111,name:"xiaohong"})
      db.ts2.insert({_id:111,name:"aaa"})
      save:当插入的数据的__id相同时会直接修改
    查看集合中的数据:
      db.集合名.find({条件文档}) 返回符合条件的全部
      db.集合名.findOne({条件文档}) 返回符合条件的第一条
      db.集合名.find({条件文档}).pretty() 将返回结果按格式输出
        db.ts2.find({age:18}) 等于18
        db.ts2.find({age:18,name:"xiaohong"}) 年龄等于18且名字是xiaohong
        db.ts2.find({$or:[{age:18},{age:20}]}) 年龄等于18或者20岁的
        db.ts2.find({$or:[{age:18},{age:20}],{name:"xiaohong"}}) 年龄等于18或者20岁的且名字为xiaohong
        db.ts2.find({age:{$lte:18}}) 小于等于18
        db.ts2.find({age:{$gte:18}}) 大于等于18
        db.ts2.find({age:{$ne:18}}) 不等于18
        db.ts2.find({age:{$in:[12,16,18]}}) 年龄属于12,16,18
        db.ts2.find({age:{$nin:[12,16,18]}}) 年龄不属于12,16,18
        db.ts2.find({name:/^abc/}) 名字以abc开头的
        db.ts2.find({name:{$regex:"^abc"}}) 名字以abc开头的
        db.ts2.find({age:18}).limit(2) 显示头两条
        db.ts2.find({age:18}).skip(2) 跳过头两条,显示剩下的
        db.ts2.find({age:18}).skip(2).limit(5) 指定显示从第三条开始之后的5条
        db.ts2.find({$where:function(){return this.age<=18}}) 返回年龄大于18的所有字段
        db.ts2.find({$where:function(){return this.age<=18}},{name:1,__id:0}) 返回年龄大于18的name字段,__id默认显示,其他字段不显示不能写name:0,会报错,直接不写就好了
        db.ts2.find({age:18}).sort({age:1}) 将返回结果按年龄升序排序
        db.ts2.find({age:18}).sort({age:-1}) 将返回结果按年龄降序排序
        db.ts2.find({age:18}).sort({age:-1,name:1}) 将返回结果按年龄降序且名字升序排序
        db.ts2.find({},{name:1}) 返回所有记录的name属性键值
        db.ts2.find({age:18}).count() 返回年龄等于18的记录数
        db.ts2.count({age:18}) 返回年龄等于18的记录数
        db.ts2.distinct("name") 返回不重名的数组
        db.ts2.distinct("name",{age:{$gt:18}}) 返回不重名的,且年龄大于18的数组

    更新:db..update(<query>,<update>,{multi:<boolean>})
      query:查询条件
      update:更新操作符
      multi:可选,默认是false,表示只更新找到的第一条记录,true更新所有满足条件的文档,必须和$set合用
      db.ts2.update({name:"xiaogang"},{name:"xiaohong"}) 如果原来的集合中还如除name中的其他键,则通通会消失,这条命令是替换的意思

      db.ts2.update({name:"xiaogang"},{$set:{name:"xiaohong"}}) 只改变name对应的值,集合中其它键值不变,只更新一条符合条件的文档

      db.ts2.update({name:"xiaohong"},{$set:{name:"yses"}},{multi:true}) 只改变name对应的值,集合中其它键值不变

    删除:db.ts2.remove(<query>,{justOne:<boolean>})
      query:可选,删除文档的条件
      justOne:可选,默认false,删除全部符合条件的,true只删除查找到的第一条符合条件的文档
      db.ts2.remove({name:"xiaohong"},{justOne:true})

    数据的备份和恢复:
      备份语法(ubantu命令终端):mongodump -h dbhost -d dbname -o dbdirectory
        -h 服务器地址,也可以指定端口
        -d 需要备份的数据库名称
        -o 备份数据存放位置,此目录中存放着备份出来的地址
        mongodump -h 192.268.1.1:27017 -d test1 -o /usr/local/mongodb/data/
      恢复:mongorestore -h dbhost -d dbname --dir dbdirectory
        -h 服务器地址
        -d 需要恢复的数据库实例
        --dir 备份数据所在位置
        mongorestore -h 192.268.1.1:27017 -d test2 --dir /usr/local/mongodb/data/test1

    聚合:是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果
      db.集合名.aggregate({管道:{表达式}})
      常用管道命令:
        $gruop 将集合中的文档分组,可用于统计结果
          $group 对应的字典有几个键,结果中就有几个键
          分组依据需要放置_id后面
          取不同的字段的值需要使用$
          去字段嵌套的字段中的值的时候 $_id.country
          能够同时按照多个键进行分组 {$group:{_id:{country:"$country",province:"$province"}}}
          db.stu.aggregate(
            {
              $group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}
            }
          )

          使用$group统计整个文档
          db.stu.aggregate(
            {$group:{
              _id:null,count:{$sum:1},mean_age{$avg:"$age"}}
            }
          )
          db.stu.aggregate(
            {
              $group:{
                _id:null,count:{$sum:1},mean_age{$avg:"$age"}
              }
            },
          {$project:{gender:$_id,conut:1,mean_age:1,_id:0}}
          )

        $match 过滤数据,只输出符合条件的文档
        $project 修改文档的输出结构,如重命名、增加、删除字段、创建计算结果
        $sort 将输入文档排序后输出
        $limit 限制聚合管道返回的文档数
        $skip 跳过指定数量的文档,返回剩余文档
        $unwind 将数组类型的字段进行拆分
    表达式:
      $sum 计算总和,$sum:1 表示以一倍计数
      $avg 平均值
      $min 最小值
      $max 最大值
      $push 在结果文档中插入值到一个数组中
      $first 根据资源文档的排序获取第一个文档数据
      $last 根据资源文档的排序获取最后一个文档数据


    创建索引:提升查询速度
    测试:插入10万条数据到数据库
      for(i=0,i<100000;i++){db.t245.insert({name:"test"+i,age:i})}
      db.t245.find({name:"test10000"}).explain("executionStats") 查看本次查询花费时间
    建立索引 db.t245.ensureIndex({name:1}) 按照name创建索引,1表示升序,-1表示降序
    在默认情况下索引字段的值可以相同
    创建唯一索引(索引的值是唯一的)
    建立索引 db.t245.ensureIndex({name:1},{"unique":true})
    建立联合索引,解决单条索引无法去重的问题 db.t245.ensureIndex({name:1},{age:1})
    删除索引:db.t245.dropIndex({name:1})

    python操作MongoDB
    from pymongo import MongoClient
    # 实例化client,建立连接
    client = MongoClient(host='localhost', port=27017)
    # 选择数据库和集合
    collection = client["test"]["t245"]
    # 插入数据,返回的是id字符串
    ret = collection.insert({"name":"xiaowang","age":10})
    # 插入多条数据
    data_list = [{"name":"test{}".format(i)} for i in range(10)]
    collection.insert_many(data_list)
    # 查询一个记录,返回字典
    ret1 = collection.find_one({"name":"xiangwang"})
    # 查询所有记录,返回游标对象,像迭代器,只能循环一次,再循环取不到数
    ret2 = collection.find({"name":"xiangwang"})
    for ret in ret2:
    print(ret)

  • 相关阅读:
    Java Web系统经常使用的第三方接口
    ExtJS笔记--applyTo和renderTo的差别
    ORACLE触发器具体解释
    java多线程样例
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    排序——选择排序
    常见hash算法的原理
    jdk和jre是什么?都有什么用?(转帖)
    Ubuntu下deb包的安装方法
    參加《全流程全要素的研发项目管理》培训记录与心得
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12533145.html
Copyright © 2020-2023  润新知