Zhong__MongoDB基本使用与python简单交互使用(Ubuntu系统)

版权声明:个人原创 https://blog.csdn.net/anyedianxia/article/details/81023864
//客户端连接数据库
sudo mongo


// 查看所有的数据库列表
show databases


//选择数据库 如果没有此数据库插入数据可创建  无操作退出则不创建  有的话直接选中
use admin


//查看当前数据库
db


//创建集合           集合名字  如果直接插入数据则会间接创建集合
db.creatCollection('stu_table')


//查看集合
show collections


//查看stu_table中所有内容
db.stu_talbe.find()


//往集合中插入数据
db.info.insert({'name':'xiaoming','age':18})


//变量形式插入数据
data = {
    'name':'na',
    'age':18
}
db.info.insert(data)


//批量插入数据
data = [
        {
        'name':'stu1',
        'age':18
        },
        {
        'name':'stu2',
        'age':20
        }
        ]
db.info.insertMany(data)


'''ObjectID_id是一个12字节的十六进制数,保证每一份文件的唯一性。你可以自己去设置_id插入文档。如果没有提供,那么MongoDB的每个文档提供了一个独特的ID,这12个字节:
前4个字节为当前时间戳;之后的3个字节的机器ID;接下来的2个字节的MongoDB的服务进程id;剩余3个字节是简单的增量值
一个字节等于2位十六进制(一位十六进制的数等于四位二进制的数。一个字节等于8位二进制数) '''
data = {
    '_id':12,
    'name':'na',
    'age':18
}
db.info.insert(data)


//删除集合
db.corse.drop()
true


//限制集合大小  默认不限制  如果capped为true,则需要指定size的大小  单位为字节  超过指定则覆盖前面的
db.createCollection('capped',{capped:true,size:4000000})




//  数据操作部分


//更新数据 此方式相当新insert一条数据  并不能完好更新数据  达不到期望
db.info.update(
    {
    'name':'stu1'
    },
    {
    'age':20
    }
         )


db.info.update({ "_id" : 12},{"name" : "nana", "age" : 18 })


//局部更新(完好,可达到期望)  $set  name属性相当于指定条件
db.info.update(
         {
         'name':'stu1'
         },
         {
           $set:{
                  'age':12
                }
         }
              )


//批量更新  默认更新第一条匹配的
db.info.update(
         {
         name:'stu1'  //指定条件
         },
         {
           $set:{
                  age:22  //要更改的内容
                }
         },
         {
         multi:true  //通过multi参数指定更新全部匹配的内容
         }
              )


//删除数据 (一条)
db.info.remove(
        {
         name:'stu1'  //指定条件
         },
         {
         justOne:true  //指定删除一条
         }
         )


//删除数据 (全部匹配的)
db.info.remove(
        {
         name:'stu1'  //指定条件
         }
         )


//清空数据
db.info.remove({})


//保存数据  如果_id存在就更新数据  如果不存在就insert数据
db.info.save(
        {
        name:'小小',
        age:18
        })


db.info.save(
        {
        '_id':1,
        name:'小小',
        age:18
        })


db.info.save(
        {
        '_id':2,
        name:'小小',
        age:18
        })


//查询数据


//查询所有
db.info.find()


//查询第一条数据
db.info.findOne()


//查询指定的条件
db.info.find(
        {
        "_id" : 1,
        name:'小小'
        }
        )


//运算符查询 $lt< gt> $lte<= $gte>= $ne<>
db.info.find(
        {
        age:{$ne:20}  //查询age不等于20的人
        }
        )


//逻辑运算符查询 $or
db.info.find(
        {
        $or:[{name:'小小',
        '_id':1},
        {age:18}]
        }
            )


//范围运算符  $in $nin  in[列表中的数据]
db.info.find(
        {
        age:{$in:[18,20]}
        }
            )


//正则查询
db.info.find(
        {
        name:/^小/
        })
or
db.info.find(
        {
         name:{$regex:'^小'}
        }
            )


//自定义查询
db.info.find(
        {
        $where: function(){
        return this.name == '小小' && this.age<=18 && this.age>=12
        }
        }
            )


//limit & skip
db.info.find().limit(2)
db.info.find().skip(1)
db.info.find().limit(2).skip(1)  //顺序不分先后  结果都一样
db.info.find().skip(1).limit(2)  //显示第2-3条


//投影(控制查询结果显示)
db.info.find({name:'小小'},{'_id':0})  //0为不显示 1为默认显示
db.info.find({name:'小小'},{'_id':0,age:0})


//排序sort
db.info.find().sort(
                {
                age:1,  //1为升序 -1为降序
                name:1  //当age相同时  按照name排序
                })


//统计 可组合使用统计count
db.info.find({age:18}).count()  //先根据条件过滤再统计
db.info.count({age:18})  //直接统计


//去重  distinct
db.info.distinct('age',{name:'小小'})
db.info.distinct('name',{age:{$lte:18}})


//聚合


//格式
db.info.aggregate(


        [
            {管道:{exp}},
            {管道:{exp}},
            {管道:{exp}},
            ...


        ]


            )
//$group  分组  _id必填 $max $min $avg $sum
db.info.aggregate([
        {$group:
            {
            _id:'$age', //  $必加
            count:{$sum:1}  //count  随意写  以age为分组  统计数量
            }


        }
                  ])


db.info.aggregate([
        {$group:
            {
            _id:'age',
            min_age:{$min:'$age'}  //以age为分组  统计最小年龄
            }


        }
                  ])


db.info.aggregate([
        {$group:
            {
            _id:'age',
            avg_age:{$avg:'$age'}  //以age为分组  统计平均年龄
            }


        }
                  ])


// $push 把具体数据放入列表
// $$ROOT 表示整条数据
db.info.aggregate([
    {$group:{
            _id:'$gender',
            from:{$push:'$$ROOT'}
        }
    }
]).pretty()


//$match  匹配
db.info.aggregate([
            {
            $match:{
            age:{$lte:18}
            }
            }
                 ])


db.info.aggregate([
            {
            $match:{age:{$lte:18}}
            },
            {
            $group:{_id:'$gender',from:{$push:'$$ROOT'}}
            }


                 ])


//$project  显示
db.info.aggregate([
            {
            $match:{age:{$lte:18}}
            },
            {
            $group:{_id:'$gender',from:{$push:'$$ROOT'}}
            },
            {
            $project:{_id:0}
            }


                 ]).pretty()


//$sort  排序
db.info.aggregate([
            {
            $match:{age:{$lte:18}}
            },
            {
            $sort:{age:1}
            }
                 ]).pretty()


//$limit  $skip  管道有顺序
db.info.aggregate([
            {
            $match:{age:{$lte:18}}
            },
            {
            $sort:{age:1}
            },
            {
            $skip:1  //skip  优于limit
            },
            {
            $limit:2  //skip  后再  limit
            }
                 ]).pretty()


//$unwind  拆分列表数据  None和空列表默认不显示
db.info.aggregate([
            {
            $unwind:'$class'  //拆分class列表  过滤None和空列表
            }
                 ])


//
db.info.aggregate([
            {
            $unwind:{
            path:'$class',  //拆分class列表
            preserveNullAndEmptyArrarys:true  //不过滤None和空列表
            }
            }
                 ])


//Index  索引


//创建索引  可以提高搜索的速度
db.info.ensureIndex({name:1})  //1  开启索引


db.info.find({name:'小小'}).explain('executionStats')  //可查看查询用时


//查看索引
db.info.getIndexes()


//删除索引
db.info.dropIndex('name_1')


//备份与恢复  sudo mongodump -h 主机IP 端口 -d 要备份的数据库 -o 目标文件夹
sudo mongodump -h 127.0.0.1:27017 -d info -o /home/zhong/Desktop/mongodbBackup  // 备份
sudo mongorestore -h 127.0.0.1:27017 -d info --dir /home/zhong/Desktop/mongodbBackup  //恢复


//与python交互
from pymongo import *  # 导入库


# 创建客户端对象
client = MongoClient('127.0.0.1',27017)


# 获取数据对象
db = client.info


# 查询数据
cursor = db.info.find()


for row in cursor:
    print(row)
    
# 插入数据

db.info.insert({'name':'苏小小'})


关注微信:

邂逅最美的时光  给你别致的风情  。。。  


猜你喜欢

转载自blog.csdn.net/anyedianxia/article/details/81023864