- mongodb中基本的概念是 文檔(字段)、集合(表)、數(shù)據(jù)庫(kù)
1.查看當(dāng)前數(shù)據(jù)庫(kù)
db (默認(rèn)為test)
2.查看所有數(shù)據(jù)庫(kù)
show dbs或者show databases
3.切換數(shù)據(jù)庫(kù)
use (如果數(shù)據(jù)庫(kù)不存在,則創(chuàng)建,否則切換到指定數(shù)據(jù)庫(kù))
4.刪除當(dāng)前數(shù)據(jù)庫(kù)(注意:先切換到要?jiǎng)h除的數(shù)據(jù)庫(kù))
db.dropDatabase()
5.創(chuàng)建集合
db.createCollection(name,options)
6.查看集合
show collections
7.刪除集合
db.集合名稱.drop()
8.保存
db.集合名稱.save(document)
9.更新
db.test2.update({name:'100cxy'},{name:'cxy100'})
10.數(shù)據(jù)查詢
db.wzry.find({age:5})
db.wzry.findOne({age:5}) 查詢,只返回第?個(gè)
db.wzry.find({age:5}).pretty() 將結(jié)果格式化
一、比較、范圍運(yùn)算符
- 等于
默認(rèn)是等于判斷,沒(méi)有運(yùn)算符 - 小于
db.wzry.find({ age : { $lt : 5} } ) - 小于等于
db.wzry.find({ age : { $lte : 5} } ) - 大于
db.wzry.find( { age : { $gt : 2 } }) - 大于等于
$gte (greater than equal) - 不等于
$ne (not equal) - 在范圍內(nèi)
db.wzry.find( {age : { $in : [4,6] } } ) - 不在范圍內(nèi)
db.wzry.find( { age : { $nin : [4,6] } } )
二、邏輯運(yùn)算符
- 邏輯與 (and)
db.wzry.find({age:5,type:'刺客'}) - 邏輯或 (or)
db.wzry.find({$or:[{age:5},{type:'刺客'}]})
三、支持正則表達(dá)式
- 以'后'字開(kāi)頭
-- 第一種
db.wzry.find({name:/^后/})
-- 第二種
db.wzry.find({name:{$regex:'^后'}})
四、limit和skip
- limit()用于讀取指定數(shù)量的文檔
db.wzry.find().limit(2) - limit()用于讀取指定數(shù)量的文檔
db.wzry.find().limit(2)
五、排序
- ?法sort(), ?于對(duì)結(jié)果集進(jìn)?排序
- db.集合名稱.find().sort({字段:1,...})
- 參數(shù)1為升序排列
- 參數(shù)-1為降序排列
db.wzry.find().sort({age:1})
六、統(tǒng)計(jì)個(gè)數(shù)
- 方法:count() ?于統(tǒng)計(jì)結(jié)果集中?檔條數(shù)
- db.集合名稱.find({條件}).count()
- db.集合名稱.count({條件})
db.wzry.find({age:{$gte:5}}).count()
db.wzry.count({age:{$gte:5}})
七、消除重復(fù)
- 方法:distinct() 對(duì)數(shù)據(jù)進(jìn)行去重
- db.集合名稱.distinct('去重字段',{條件})
db.wzry.distinct('type')
八、mongdb聚合
常用表達(dá)式:
$sum 計(jì)算總和, $sum:1 表示以?倍計(jì)數(shù)
$avg 計(jì)算平均值
$min 獲取最?值
$max 獲取最?值
$push在結(jié)果?檔中插?值到?個(gè)數(shù)組中
$first根據(jù)資源?檔的排序獲取第?個(gè)?檔數(shù)據(jù)
$last根據(jù)資源?檔的排序獲取最后?個(gè)?檔數(shù)據(jù)
常用操作:
$group將集合中的?檔分組, 可?于統(tǒng)計(jì)結(jié)果
$match過(guò)濾數(shù)據(jù), 只輸出符合條件的?檔
$project修改輸??檔的結(jié)構(gòu), 如重命名、 增加、 刪除字段、 創(chuàng)建計(jì)算結(jié)果
$sort將輸??檔排序后輸出
$limit限制聚合管道返回的?檔數(shù)
$skip跳過(guò)指定數(shù)量的?檔, 并返回余下的?檔
$unwind 將數(shù)組類型的字段進(jìn)?拆分
九、mongo和python交互
1、導(dǎo)入模塊
import pymongo
2、建立與MongoClient的連接
client = MongoClient('localhost',27017)
3、得到數(shù)據(jù)庫(kù)
db = client.數(shù)據(jù)庫(kù)名
4、得到一個(gè)集合
collection = db.集合名稱
from pymongo import *
"""
插入方法:
insert_one() 傳入一個(gè)字典,表示插入一個(gè)文檔
insert_many() 傳入一個(gè)列表,列表的元素為字典,插入多條文檔
"""
def insert():
try:
# 1. 創(chuàng)建連接對(duì)象
client = MongoClient(host='localhost', port=27017)
# 2. 獲取數(shù)據(jù)庫(kù)
# 如果這個(gè)數(shù)據(jù)庫(kù)不存在,就會(huì)在內(nèi)存中虛擬創(chuàng)建
# 當(dāng)在庫(kù)里面創(chuàng)建集合的時(shí)候,就會(huì)在物理真實(shí)創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)
db = client.demo # 使用demo數(shù)據(jù)庫(kù)
# 向stu集合插入數(shù)據(jù)
# 插入一條
db.stu.insert_one({'name': 'zs', 'age': 'lisi'})
# 插入多條
db.stu.insert_many([{'name': 1}, {'name': 2}])
except Exception as e:
print(e)
if __name__ == '__main__':
insert()