1. 程式人生 > >Zhong__MongoDB基本使用與python簡單互動使用(Ubuntu系統)

Zhong__MongoDB基本使用與python簡單互動使用(Ubuntu系統)

//客戶端連線資料庫
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':'蘇小小'})


關注微信:

邂逅最美的時光  給你別緻的風情  。。。