Zhong__MongoDB基本使用與python簡單互動使用(Ubuntu系統)
阿新 • • 發佈:2018-12-17
//客戶端連線資料庫
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)
# 插入資料
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':'蘇小小'})
關注微信:
邂逅最美的時光 給你別緻的風情 。。。